我有幾個相同的形式與驗證功能。 我想創建除驗證功能以外具有相同行爲的另一個窗體。反應js組件多態性
我嘗試爲此使用mixins,但mixins不支持方法覆蓋。
什麼方法最適合這個問題?
這是問題的例子:https://jsfiddle.net/69z2wepo/9150/
var FormMixin = {
validate: function() {
if (this.state.message !== '') {
this.setState({status: 'ok'});
} else {
this.setState({status: 'error'});
}
},
getInitialState: function() {
return {
message: 'Hello123!',
status: ''
};
},
handleChange: function (newValue) {
this.setState({
message: newValue
});
},
valueLink: function() {
return {
value: this.state.message,
requestChange: this.handleChange
}
},
render: function() {
return (
<div>
<input type = "text" valueLink = {this.valueLink()} />
<button onClick={this.validate} >Validate</button>
<div>{this.state.status}</div>
</div>
);
}
}
var Form = React.createClass({
mixins: [FormMixin]
});
var FormEmpty = React.createClass({
/*validate: function() { // How to override validation
this.setState({status: 'ok'});
},*/
mixins: [FormMixin]
});
var Hello = React.createClass({
render: function() {
return (<div>
<Form />
<Form />
<Form />
<FormEmpty />
</div>);
}
});
React.render(<Hello />, document.getElementById('container'));