gpt4 book ai didi

state - 复制 props 的状态是 React.js 的唯一方法吗?

转载 作者:行者123 更新时间:2023-12-05 07:58:19 26 4
gpt4 key购买 nike

看看下面给出的源代码。它模拟由两个 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 中这样做。

最佳答案

我觉得您的示例在这里并没有直接的错误,因为在编写 ReactJS 组件时您可以使用不同的范例。如果您确实想从呈现的组件中读取,请查看 more about refs 中的方法.像这样向您的 whois 添加 ref 属性:

<Whois onFocus={this.switchTo.bind(this, 'intern')} onChange={this.updateWhois.bind(this, 'intern')} ref="whoIs1" />

this.refs.whoIs1.getDOMNode();

可以在组件渲染到 DOM 后查看它。在 onChange 方法的处理程序中使用 event 参数也是一个不错的选择,因为您可以从 event 的属性中查询组件的状态。

关于state - 复制 props 的状态是 React.js 的唯一方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com