私はReactを初めて使うので、データを兄弟コンポーネント間でやりとりする必要があるタスクをどのように達成するのが最適かについて質問したいと思います。React.js - 兄弟コンポーネント間の通信
まず、私はタスクを説明します:
私は、アレイから成る動的に選択ボックスを下に渡し、単一の親の子である複数の<select>
のコンポーネントを持っていると言います。各ボックスは初期状態でまったく同じ利用可能なオプションを持っていますが、ユーザがあるボックスで特定のオプションを選択すると、それが解放されるまで他のすべてのボックスでオプションとして無効にする必要があります。
ここでは、同じ(愚かな)コードの例を示します。
この例では、「これは私のお気に入りです」と「それは私の一番お気に入り」のオプションを無効にする必要があります(つまりdisabled: true
)。ユーザーは1つの選択ボックスでそれらを選択します(ユーザーが選択を解除した場合は解放します)。
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"
/>
)
}
});
最高のコールバックを介して親にバックアップデータを渡すことによって達成子オプションを更新していますか?そのコールバック内の子コンポーネントにアクセスするためにrefを使用する必要がありますか? redux reducerは助けてくれますか?
私はこの質問の一般的な性質についてお詫びしますが、これらの兄弟と兄弟のコンポーネントのやりとりを一方向の方法で処理する方法については、多くの方向性を見出していません。
ありがとうございました。
はい、はい、はいの違いがあります。 reduxは、グローバル変数を使用するのと同じように、コンポーネントのロジックの観点から基本的に何をしているのかを簡単にします。 – dandavis