文章29 | 阅读 13241 | 点赞0
我们在写 React 组件时,参考官方文档写法,一要声明 state,二要绑定函数的 this,常规写法如下:
class DEMO extends React.Component {
constructor() {
super();
this.state = {
count: 0
};
this.kick = this.kick.bind(this);
}
render() {
return <div>
<button onClick={this.kick}>点击他!</button>
你已经点击了{this.state.count}次。
</div>;
}
kick() {
this.setState({
count: this.state.count + 1
});
}
}
然而,这种写法很麻烦,灰常麻烦,但是我有解决方案,写法如下:
class DEMO extends React.Component {
state = {
count: 0
};
render() {
return <div>
<button onClick={this.kick}>点击他!</button>
你已经点击了{this.state.count}次。
</div>;
}
kick = () => {
this.setState({
count: this.state.count + 1
});
};
}
效果:
核心改动有两点:
bind()
来绑定 this。实现方式:
babel-loader
的说明,点击访问 5.2、支持新特性;虽然 React 打包后,并不大,但是对于我们,是没必要直接打包到我们的 js 代码中的,使用 CDN 是更好的选择。
举例来说,例如以上的代码,假如我们使用一般的打包方式,将 react
和 react-dom
打包到我们的 js 文件中,打包后的文件大小大约是:
app.js // 33 KB
vendor.js // 106 KB
而将 React 通过 CDN 引入后,我们打包后的 js 大小将为:
app.js // 33 KB
vendor.js // 8 KB
这之间大约 100 KB 的大小差距,就是 react
和 react-dom
这 2 个包节约下来的大小。
具体做法:
首先在 webpack.config.js
(即 webpack 的配置文件)里,给导出的 webpack 配置属性,添加一个额外属性:
externals: {
"react": "React",
"react-dom": "ReactDOM"
}
其次,在 html 模板文件里,引入 CDN ,以下两行插入 head 标签中。
在示例中,是 index.html 文件,这个是在 webpack 通过 html-webpack-plugin
插件配置的。
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
然后就搞定了。
关于原理,请参考我这一篇博客 9、外部扩展(Externals)。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq20004604/article/details/79683295
内容来源于网络,如有侵权,请联系作者删除!