【发布时间】:2016-07-08 17:07:00
【问题描述】:
我是 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 reducer 有帮助吗?
对于这个问题的一般性质,我深表歉意,但对于如何以单向方式处理这些同级到同级的组件交互,我没有找到很多方向。
感谢您的帮助。
【问题讨论】:
-
是的,是的,而且是不同的方式; redux 将使它更简单,就像使用全局变量一样,因为从组件逻辑的角度来看,这基本上就是它正在做的事情。
标签: javascript reactjs flux