Facebook的ReactJS库对which component methods can be overridden and how有严格的规定。除非它是specifically allowed,否则我们不能重新定义方法。
对于我的自定义混入,如果我有一个我想要重写的方法,我该如何更新SpecPolicy呢?这有可能吗?
这个例子有点做作,但它应该能让人明白这一点。假设我有下面的mixin,它试图提供一个默认的renderItem
方法,如果需要的话,它将被覆盖。当我试图呈现组件<Hello ... />
时,我得到了一个Invariant Violation
错误。你可以找到a jsfiddle here。
var MyMixin = {
render: function () {
return this.renderItem();
},
renderItem: function () {
return <div>Hello {this.props.name}</div>;
}
};
var Hello = React.createClass({
mixins: [MyMixin],
renderItem: function() {
return <div>Hey {this.props.name}</div>;
}
});
发布于 2014-06-02 06:22:14
现在这是不可能的。React的未来版本很可能会有利用ES6类的mixins,并且会更加灵活。请参阅此处以获取建议:
https://github.com/reactjs/react-future/blob/master/01%20-%20Core/02%20-%20Mixins.js
发布于 2014-07-11 08:50:55
你可以只使用像jQuery extend这样的东西来扩展传递给React.createClass
的对象,而不是使用mixin -这将允许你在需要的时候仍然使用mixin,并在需要的时候使用这个方法(JS Fiddle):
/** @jsx React.DOM */
var MyMixin = {
render: function () {
return this.renderItem();
},
renderItem: function () {
return <div>Hello {this.props.name}</div>;
}
};
var Hello = React.createClass($.extend(MyMixin, {
renderItem: function() {
return <div>Hey {this.props.name}</div>;
}
}));
React.renderComponent(<Hello name="World" />, document.body);
发布于 2015-05-11 10:13:25
如果你仍然想要一个默认的rednerItem实现,也许你可以这样做:
var MyMixin = {
render: function () {
return this.renderItem();
},
renderItem: function () {
var customRender = this.customRenderItem;
return customRender != undefined ? customRender() : <div>Hello {this.props.name}</div>;
}
};
var Hello = React.createClass({
mixins: [MyMixin],
customRenderItem: function() {
return <div>Hey {this.props.name}</div>;
}
});
https://stackoverflow.com/questions/23984887
复制相似问题