Я новичок в реакторе, и я хотел бы задать стратегический вопрос о том, как лучше всего выполнить задачу, когда данные должны передаваться между компонентами-братьями.React.js - Общение между родственными компонентами
Во-первых, я опишу задачу:
Скажем, у меня есть несколько <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 упростит использование глобальных переменных, потому что, в общем, это то, что он делает с точки зрения логики компонента. – dandavis