装饰器在react里面的配置
react项目使用的是create-react-app:
- 安装此包 @babel/plugin-proposal-decorators;
-
配置config = injectBabelPlugin(['@babel/plugin-proposal-decorators', { "legacy": true }], config) 如下图
image.png
function inject_unount (target) {
// 改装componentWillUnmount,销毁的时候记录一下
let next = target.prototype.componentWillUnmount
target.prototype.componentWillUnmount = function () {
if (next) next.call(this, ...arguments);//先判断componenteillunmout存在原有的一 些东西不,存在就执行
this.unmount = true
}
// 对setState的改装,setState查看目前是否已经销毁
let setState = target.prototype.setState //原有的setState
target.prototype.setState = function () {
if ( this.unmount ) return ;
setState.call(this, ...arguments)
}
}
@inject_unount
class BaseComponent extends Component {
}
//通过改装这俩函数,当元素销毁的时候,就不再执行setState,不再re-render
网友评论