我正在尝试创建一个装饰器方法,它将一些默认的生命周期方法添加到react组件中。我的目标是在组件中添加一些默认功能,例如,所有组件都应该能够在componentWillMount
上执行特定的事务。
我读了几篇文章并发现了这一点。它可用于向反应组件添加新道具。
export default function context(contextTypes, context) {
return function (DecoratedComponent) {
return class {
static childContextTypes = contextTypes;
getChildContext() {
return context;
}
render() {
return (
<DecoratedComponent {...this.props} />
);
}
}
}
}
但我不确定如何添加像componentWillMount
这样的类方法。我可以做点什么吗
Object.assign(DecoratedComponent.prototype, {
componentWillMount: () => {
// do something
}
})
任何朝着正确方向的想法?
参考文献:
http://asaf.github.io/blog/2015/06/23/extending-behavior-of-react-components-by-es6-decorators/ https://gist.github.com/motiz88/3db323f018975efce575
答案 0 :(得分:2)
如果您将Babel与阶段1或阶段0预设一起使用,则可以使用以下方法:
首先,定义你的装饰器功能,例如:
function lifecycleDefaults(target) {
target.prototype.componentWillMount = function() {
console.log('componentWillMount ran from decorator!');
console.log('this.props is still accessible', this.props);
}
target.prototype.componentWillUnmount = function() {
console.log('componentWillUnmount ran from decorator!');
console.log('this.props is still accessible', this.props);
}
target.prototype.componentDidMount = function() {
console.log('componentDidMount ran from decorator!');
console.log('this.props is still accessible', this.props);
}
}
然后,使用您刚刚定义的函数装饰组件,例如:
@lifecycleDefaults
export class Page extends React.Component {
render() {
return (
<div>Hello decorators!</div>
);
}
};
组件'Page'现在有方法componentWillMount,componentDidMount和componentWillUnmount。它们在组件生命周期的预期时间运行。
2警告:1)我正在使用babel transform-decorators-legacy插件; 2)我正在使用Webpack构建我的项目,包括babel的transform-runtime。 YMMV。