【发布时间】:2014-09-28 10:09:31
【问题描述】:
看看下面给出的源代码。它模拟了一个由两个 WHOIS 组件和一个单选按钮组组成的表单。单选按钮确定被选中的 WHOIS 组件。一旦选定的 WHOIS 组件有效,该表单应该可以提交并发出选定 WHOIS 的数据。
/** @jsx React.DOM */
var Publish = React.createClass({
getInitialState: function() {
return {
type: 'intern',
intern: {
domain: '',
valid: false
},
extern: {
domain: '',
valid: false
}
};
},
updateWhois: function(type, domain, state) {
var newState = {};
newState[type] = {
domain: domain,
valid: state === 'free'
};
this.setState(newState);
},
switchTo: function(type) {
this.setState({
type: type
});
},
isValid: function() {
var type = this.state.type;
var typeState = this.state[type];
return typeState.valid;
},
render: function() {
return (
<form className="publish">
<div>
<input name="publish-type" type="radio" checked={this.state.type === 'intern'} onChange={this.switchTo.bind(this, 'intern')} />
<Whois onFocus={this.switchTo.bind(this, 'intern')} onChange={this.updateWhois.bind(this, 'intern')} />
</div>
<div>
<input name="publish-type" type="radio" checked={this.state.type === 'extern'} onChange={this.switchTo.bind(this, 'extern')} />
<Whois onFocus={this.switchTo.bind(this, 'extern')} onChange={this.updateWhois.bind(this, 'extern')} />
</div>
<input type="submit" disabled={!this.isValid()} />
</form>
);
}
});
此代码完美运行。但是我觉得我在复制子组件的状态。我该如何改进这个例子?提交后,我宁愿直接查询 Whois 组件(例如 .getDomain 方法),但我不知道 if 以及我应该如何在 ReactJs 中这样做。
【问题讨论】:
-
如果您正在查找表单提交时的状态,请在表单元素上添加
onSubmit的回调,并在该点检查提交的表单的值。无需检查 DOM:表单元素将在回调中为event.target。