@babel/plugin-transform-react-constant-elements
此插件可以通过将 React 元素提升到尽可能高的作用域来加快协调速度并减少垃圾收集压力,从而防止多次不必要的实例化。
示例
输入
JSX
const Hr = () => {
return <hr className="hr" />;
};
const WithChildren = (props) => {
return <div className={props.className}>
<hr />
</div>;
}
输出
JSX
var _hr, _hr2;
const Hr = () => {
return _hr || (_hr = <hr className="hr" />);
};
const WithChildren = (props) => {
return <div className={props.className}>
{_hr2 || (_hr2 = <hr />)}
</div>;
}
去优化
-
展开运算符
JSX<div {...foobar} />
-
引用
JSX<div ref="foobar" />
<div ref={node => this.node = node} /> -
可变属性
提示
JavaScript
<div style={{ width: 100 }} />
安装
- npm
- Yarn
- pnpm
npm install --save-dev @babel/plugin-transform-react-constant-elements
yarn add --dev @babel/plugin-transform-react-constant-elements
pnpm add --save-dev @babel/plugin-transform-react-constant-elements
用法
使用配置文件(推荐)
babel.config.json
{
"plugins": ["@babel/plugin-transform-react-constant-elements"]
}
选项
allowMutablePropsOnTags
Array<string>
,默认为 []
如果您正在使用使用对象属性的特定库(如 react-intl),并且您确定该元素不会修改其自身的属性,则可以允许特定元素使用对象。
这将跳过 可变属性
去优化。
babel.config.json
{
"plugins": [
[
"@babel/plugin-transform-react-constant-elements",
{ "allowMutablePropsOnTags": ["FormattedMessage"] }
]
]
}
提示
您可以在 此处 阅读有关配置插件选项的更多信息
通过 CLI
Shell
babel --plugins @babel/plugin-transform-react-constant-elements script.js
通过 Node API
JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-react-constant-elements"],
});