Jestem nowy w React i chciałbym zadać pytanie dotyczące strategii, jak najlepiej wykonać zadanie, w którym dane muszą być przekazywane między komponentami siostrzanymi.React.js - Komunikacja pomiędzy komponentami rodzeństwa
Najpierw opiszę zadanie:
Say mam wiele <select>
składniki, które są dzieci z jednym rodzicem, który przechodzi w dół wybierz pola dynamicznie, składający się z tablicy. Każde pole ma dokładnie takie same dostępne opcje w stanie początkowym, ale gdy użytkownik wybierze konkretną opcję w jednym polu, musi być wyłączone jako opcja we wszystkich pozostałych polach, dopóki nie zostanie zwolnione.
Oto przykład tego samego (głupiego) kodu. (Używam react-select
jako skrót do tworzenia SELECT pola.)
W tym przykładzie, muszę wyłączyć (czyli ustawić disabled: true
) opcje dla „To mój ulubiony” i „To mój najmniej ulubiony”, gdy użytkownik wybiera je w jednym polu wyboru (i zwalnia je, jeśli użytkownik odznaczy je).
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"
/>
)
}
});
aktualizuje opcje dziecko najlepiej osiągnąć, przekazując dane z powrotem do macierzystej przez zwrotnego? Czy należy używać odwołań, aby uzyskać dostęp do komponentów podrzędnych w tym wywołaniu zwrotnym? Czy reduktor redux pomaga?
Przepraszam za ogólną naturę pytania, ale nie znajduję wielu wskazówek, jak radzić sobie z tymi interakcjami między rodzeństwem i rodzeństwem w jednokierunkowy sposób.
Dzięki za pomoc.
tak, tak, i tak w inny sposób; redux uprości to, tak jak przy użyciu zmiennych globalnych, ponieważ, cóż, to w zasadzie to, co robi z perspektywy logiki komponentu. – dandavis