另一個選項而不是mixin是創建一個基本/抽象按鈕,由各種特殊類型的按鈕(通過構圖模式)使用。 Here's一個簡單的演示。
我所做的是創建一個具有基本按鈕點擊行爲的AbstractButton
。例如,您可以將所有按鈕共同的東西放在那裏。由此我創建了第二個類RealButton1
。它使用AbstractButton
並處理單擊事件(onClick
)。然後,我創建了一個名爲SecondRealButton
的按鈕的第二個特化。兩者都可以有不同的表現,但仍然可以根據需要重複使用。
雖然mixins今天工作,但是他們還沒有明確的路徑,但recent announcements開始支持EcmaScript 6語法。同樣,從同一篇博客文章中,你會注意到他們特別提到ES6類沒有任何混合支持。
在這種情況下,我不會推薦使用mixin(大概)擁有UI組件,也不會嘗試爲其他可插入系統提供擴展模型(例如可能需要使用路由器或商店/通量/調度器類型系統)。
var AbstractButton = React.createClass({
propTypes: {
onClick: React.PropTypes.func
},
handleClick: function(e) {
if (this.props.onClick) {
this.props.onClick.call(this, e);
}
},
render: function() {
return <button onClick={this.handleClick}>
{this.props.caption}
</button>;
}
});
var RealButton1 = React.createClass({
propTypes: {
caption: React.PropTypes.string.isRequired
},
render: function() {
return <AbstractButton
onClick={ this.clicked }
caption={ this.props.caption } />;
},
clicked: function(e) {
console.log('clicked ' + this.props.caption);
}
});
var SecondRealButton = React.createClass({
propTypes: {
caption: React.PropTypes.string.isRequired
},
render: function() {
return <AbstractButton onClick={ this.clicked }
caption={ this.props.caption } />;
},
clicked: function(e) {
console.log('second type clicked ' + this.props.caption);
}
});
var SampleApp = React.createClass({
render: function() {
return (<div>
<RealButton1 caption="button 1" />
<RealButton1 caption="button 2" />
<SecondRealButton caption="other type button #1" />
</div>
);
}
});
React.render(<SampleApp />, document.body);
非常好,謝謝! – 2015-02-12 10:59:10