Из реакционных документов:
setState()
не сразу мутируетthis.state
, а создает ожидающий переход состояния. Доступ кthis.state
после вызова этого метода может потенциально вернуть существующее значение.https://facebook.github.io/react/docs/component-api.html
Что вы можете сделать, это передать функцию обратного вызова
setState
, которая запускается после обновления состояния:this.setState( {autocomplete_from: ...}, function () { ... at this point the state of the component is set ... } )
Вам нужно установить начальное состояние вашего компонента, попробуйте добавить следующее к вершине вашего компонента.
getInitialState: function() {
return {
autocomplete_from: ''
};
}
EDIT:
В компоненте DynamicFrom у вас есть :
render: function() {
return (
<AutocompleteFromCheckboxes
autocomplete_from={this.props.data.autocomplete_from} />
);
}
Поскольку вы пытаетесь ссылаться на состояние, которое вы должны написать
autocomplete_form={this.state.autocomplete_from}
Также вы пытаетесь установить состояние из дочернего компонента и не должны напрямую изменять государство. Лучший способ приблизиться к этому - передать функцию DynamicFrom (удерживает состояние) в AutocompleteFromCheckboxes. Таким образом.
var DynamicForm = React.createClass({
handleChange: function(value) {
this.setState({autocompelete_from: value});
},
render: function() {
return(
<AutocompleteFromCheckboxes
autocomplete_from={this.state.autocomplete_from}
handleChange={this.handleChange}
/>
);
},
....
});
AutocompleteFromCheckboxes = React.createClass({
....
onChange={this.handleChange}
....
handleChange: function(e) {
this.props.handleChange(e.target.value);
}
});
console.log
выводится как ожидается. :-) – martins 7 April 2015 в 12:28componentDidUpdate
, но нет гарантии, что он будет вызван после вызоваsetState
- ЕслиshouldComponentUpdate
возвращает false, тогдаrender()
будет полностью пропущен пока не изменится следующее состояние. Кроме того,componentWillUpdate
иcomponentDidUpdate
не будут вызываться. . – Piotr Dobrogost 31 December 2015 в 15:24