Сложно сказать основываясь на описании, но если вы пытаетесь пройти через initial value
props
, а затем имеют значения, которые в вашем state
вот пример. Значения для вашего filtered values
обновляются каждый раз, когда ваш onChange будет вызываться в вашем рендере и сохраняется в пределах selected
.
Это будет работать для безысходных вызовов, в вашем рендере вы ждете, пока состояние не будет установлено на родительском объекте, прежде чем разрешить рендеринг дочернего компонента.
someAsyncSetup() {
... doing something
this.setState({
possibleValues : possibleValues
});
}
Внутри компонентаDidMount() вы устанавливаете свое состояние для возможных значений, которые являются синхронными. Когда вы получите свои значения, вызовите setState(). Тогда рендер будет ждать до тех пор, пока не будет завершена до создания дочерних компонентов
{this.state.possibleValues != null &&...
<ExampleChild...
Пример родительского компе
constructor(props) {
super(props);
this.state = {possibleValues: null};
this.onChange = this.onChange.bind(this);
this.someAsyncSetup = this.someAsyncSetup.bind(this);
}
onChange(selected) {
this.props.onChange({ selected }); // you may need to call your parent props again
}
someAsyncSetup() {
... doing something
this.setState({
possibleValues : possibleValues
});
}
componentDidMount() {
this.someAsyncSetup(); // inside here you set your state for possible values. Then the render will wait until it is completed before creating the child component
}
{this.state.possibleValues != null &&
<ExampleChild
onChange={this.onChange}
possibleValues={this.state.possibleValues}
}
Пример детской компе
class ExampleChild extends React.Component {
constructor(props) {
super(props);
this.state = { selected: this.props.filteredValues };
this.onChange = this.onChange.bind(this);
}
// onChange we want to set the list of selected values
onChange(selected) {
this.setState({ selected });
// call the parent component's onChange so that we set the values
// within the parents component state
this.props.onChange(selected);
}
render() {
return (
<someComp
options={this.props.possibleValues}
selected={this.state.selected}
defaultValue={this.props.filteredValues}
onChange={this.onChange} />
)
}
}
Три быстрых вещей. 1. Можете ли вы опубликовать минимальный пример jsbin, с которым мы можем играть? 2. Если данные поступают через реквизиты, почему вы назначаете его для подтверждения? 3. Если вы заявляете, что он основан на реквизитах и является синхронным, инициализация его принадлежит конструктору, а не 'componentDidMount'. –
Можете ли вы разместить свой пример без него, это трудно поделать. Я также думаю, что если вы пытаетесь использовать состояние, это должно быть сделано в конструкторе. – ALM
Создание минимального примера выглядит сложным, так как я глубоко в иерархии компонентов. Я загружаю данные асинхронно, может быть, проблема? Если да, где я должен инициализировать состояние? – Akhil