6.1.4 曾经的React Mixin
您可以在百度里搜索“深入浅出React和Redux 艾草文学(www.321553.xyz)”查找最新章节!
6.1.4 曾经的React Mixin
除了上面提到的高阶组件,React还有一个可以提供组件之间复用代码的功能叫Mixin,不过这已经是一个不建议使用的功能,在这里讲一段历史故事为的是让大家理解从灵活到不灵活的原因。
我们可以定义这样一个包含shouldComponentUpdate函数的Mixin,代码如下:
const ShouldUpdateMixin = {
shouldComponentUpdate: function() {
return !this.props.useCache;
}
}
但是Mixin只能在用React.createClass方式创建的组件类中才能使用,不能在通过ES6语法创建的React组件中使用。
下面是一个使用Mixin的代码样例:
const SampleComponent = React.createClass({
mixins: [ShouldUpdateMixin],
render: function() {
// 实现render函数
}
});
使用React.createClass创建出来的React组件SampleComponent,因为有mixins字段的存在,成员方法中就“混入”了ShouldUpdateMixin这个对象里的方法。
第一眼看过去,Mixins似乎使用非常灵活。但是,Mixin因为太灵活,导致难以管理,而且作为一项设计原则,应该尽量把state从组件里抽取出来,尽量构建无状态组件,Mixins却反其道而行之,鼓励往React组件中加入状态,这也是一个很大的缺陷。
对于Mixins的批评不胜枚举,不用过多描述。我们只需要知道,在ES6的React组件类定义方法中不能使用Mixin,React官方也很明确声明Mixin是应该被废弃的方法。所以我们只需要知道在React的历史上,曾经有这样一个重用代码的解决方法就足够了。 深入浅出React和Redux