import { h } из preact - когда это необходимо

В настоящее время я создаю Preact PWA с CLI.

Насколько я понимаю, там, где у меня есть компонент, определенный с помощью JSX, мне нужно иметь import { h } from 'preact' в верхней части файла.

Я удалил все экземпляры этого оператора импорта, но приложение все еще работает и прекрасно работает.

Может кто-то прямо здесь меня выставить, так как я сейчас немного растерялся - может быть, где-то за кулисами происходит какое-то волшебство?

2 ответа

Когда вы пишете синтаксис JSX, как

render() {
  return <div id="abc">Hello World</div>
}

За экраном он будет преобразован в

render() {
  return h('div', { id: 'abc' }, 'Hello World')
}

Итак, когда необходимо импортировать h?

Каждый раз, когда вы используете синтаксис JSX. Поскольку он не является частью спецификации JavaScript, его необходимо преобразовать в эквивалентный синтаксис. Который в действии использует h или в реакции, используя React.createElement,

Как вы упоминаете, мы можем сделать import автоматический с использованием дополнительных babel-plugin-jsx-pragmatic плагин.

https://github.com/jmm/babel-plugin-jsx-pragmatic

module.exports = {
  presets: [],
  'plugins': [
    ['@babel/plugin-transform-react-jsx', { pragma: 'h' }],
    ['babel-plugin-jsx-pragmatic', {
      module: 'preact',
      import: 'h',
      export: 'h',
    }],
  ],
}

Хорошо, после некоторого осмотра я вижу, что в модуле узла preact-cli есть babel-config, который добавляет следующий код:

plugins: [ [require.resolve('babel-plugin-transform-react-jsx'), { pragma: 'h' }], [require.resolve('babel-plugin-jsx-pragmatic'), { module: 'preact', export: 'h', import: 'h' }] ]

Похоже, это означает импорт h являются автоматическими и явно не требуются. Было бы хорошо, если бы это было упомянуто в их документации!

Другие вопросы по тегам