我是 React 的新手,我想问一个策略问题,关于如何最好地完成必须在兄弟组件之间进行数据通信的任务。
首先,我将描述任务:
假设我有多个<select>
组件,它们是单个父级的子级,它们动态地传递选择框,由一个数组组成。每个框在其初始状态下具有完全相同的可用选项,但是一旦用户在一个框中选择了特定选项,则必须将其禁用为所有其他框中的选项,直到它被释放。
这是(愚蠢的)代码中相同的示例。(我react-select
用作创建选择框的简写。)
在这个例子中,disabled: true
当用户在一个选择框中选择“这是我最喜欢的”和“这是我最不喜欢的”选项时,我需要禁用(即设置)选项(如果用户取消选择它们,则释放它们)。
var React = require('react');
var Select = require('react-select');
var AnForm = React.createClass({
render: function(){
// this.props.fruits is an array passed in that looks like:
// ['apples', 'bananas', 'cherries','watermelon','oranges']
var selects = this.props.fruits.map(function(fruit, i) {
var options = [
{ value: 'first', label: 'It\'s my favorite', disabled: false },
{ value: 'second', label: 'I\'m OK with it', disabled: false },
{ value: 'third', label: 'It\'s my least favorite', disabled: false }
];
return (
<Child fruit={fruit} key={i} options={options} />
);
});
return (
<div id="myFormThingy">
{fruitSelects}
</div>
)
}
});
var AnChild = React.createClass({
getInitialState: function() {
return {
value:'',
options: this.props.options
};
},
render: function(){
function changeValue(value){
this.setState({value:value});
}
return (
<label for={this.props.fruit}>{this.props.fruit}</label>
<Select
name={this.props.fruit}
value={this.state.value}
options={this.state.options}
onChange={changeValue.bind(this)}
placeholder="Choose one"
/>
)
}
});
更新子选项是否最好通过回调将数据传递回父级来完成?我应该使用 refs 访问该回调中的子组件吗?redux 减速器有帮助吗?
对于这个问题的一般性质,我深表歉意,但我没有找到关于如何以单向方式处理这些兄弟对兄弟组件交互的很多方向。
谢谢你的帮助。