preact - import { h } from preact - 什么时候需要
问题描述
我目前正在使用 CLI 构建 Preact PWA。
我的理解是,无论我有一个用 JSX 定义的组件,我都需要import { h } from 'preact'
在文件的顶部有。
我删除了该导入语句的所有实例,但应用程序仍然运行并构建得非常好。
有人可以让我直截了当地说,因为我现在有点困惑 - 也许某个地方在幕后发生了一些魔法?
解决方案
当您编写类似的 jsx 语法时
render() {
return <div id="abc">Hello World</div>
}
在屏幕后面它将转换为
render() {
return h('div', { id: 'abc' }, 'Hello World')
}
那么,什么时候需要导入h
呢?
答案是每次使用 jsx 语法。JSX 不是 JavaScript 规范的一部分,它必须转换为等效的函数调用。哪个在使用中使用h
或在使用中反应React.createElement
。
正如你提到的,我们可以import
通过使用额外的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',
}],
],
}
推荐阅读
- c - 将二维数组从函数返回到主函数
- mysql - 无法使用 LOAD DATA 语句将数据加载到表中(带有制表符分隔的文件)
- swift - 调整弹出窗口的大小
- encryption - 如何使用 Windows CryptoAPI 中的原始十六进制密钥值为 CryptDecrypt 创建对称密钥?
- if-statement - 析取 G1 ; G2 vs. If-then-else Cond -> G1 ; G2
- python - 通过该类的方法调用该类的参数的参数
- xml - 最小长度在下面的代码中不起作用。当我为 Name 提供空白值时,它通过了模式验证(它应该抛出错误)
- mysql - 如何修复“无法打开所需的默认文件:/usr/local/ampps/mysql/etc/my.cnf”错误?
- javascript - 在 JavaScript 中按下键时重复运行代码
- css - 如何使用响应式图像编写半垂直页面