import h from preact - 啥时候需要

Posted

技术标签:

【中文标题】import h from preact - 啥时候需要【英文标题】:import h from preact - when is it necessaryimport h from preact - 什么时候需要 【发布时间】:2019-02-24 07:14:55 【问题描述】:

我目前正在使用 CLI 构建 Preact PWA。

我的理解是,无论我有一个用 JSX 定义的组件,我都需要在文件顶部有 import h from 'preact'

我删除了该 import 语句的所有实例,但应用程序仍然可以正常运行和构建。

有人能把我说清楚吗,因为我现在有点困惑 - 也许某处幕后正在发生一些魔法?

【问题讨论】:

【参考方案1】:

当你写一个类似 jsx 的语法时

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

在屏幕后面会被转换成

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

那么,什么时候需要导入h

答案是每次使用 jsx 语法时。 JSX 不是 javascript 规范的一部分,它必须转换为等效的函数调用。使用h 或使用React.createElement 进行反应。

正如您所提到的,我们可以通过使用额外的babel-plugin-jsx-pragmatic 插件使import 自动化。

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

了解更多信息:https://github.com/jmm/babel-plugin-jsx-pragmatic

【讨论】:

【参考方案2】:

好的,经过一番挖掘,我看到 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 的导入是自动的,并且没有明确要求。如果他们的文档中提到了这一点,那就太好了!

【讨论】:

确实有这方面的文档。 github.com/developit/preact#import-what-you-need 更新@rbenvenuto 的评论:github.com/preactjs/preact/tree/…

以上是关于import h from preact - 啥时候需要的主要内容,如果未能解决你的问题,请参考以下文章

将 React 开发工具与 Preact 一起使用

内嵌Python import时undefined symbol错误及解决

在 Preact 中渲染原始 HTML 而不使用 Preact 标记?

[PReact] Integrate Redux with Preact

[Preact] Integrate react-router with Preact

[PReact] Handle Simple Routing with preact-router