Ошибка с Alt.js и реагировать. Государство не сохраняется
Я использую этот класс для отображения и фильтрации списка. Этот класс также запускает поиск.
Моя проблема, кажется, что функция setState не является немедленной.
FriendActions.getSearchList(this.state.search);
Если я прокомментирую это действия. Console.log напечатает состояние в том виде, в каком оно должно быть. Если нет, состояние "поиск" "исчезнет".
Я думаю, что, возможно, событие изменения - это пожар, прежде чем состояние изменится. Но я понятия не имею.
Надеюсь, я ясно дал понять. Если не можете спросить меня больше информации.
onSearch(event){
this.setState({search: event.target.value});
if (this.state.search !== '')
FriendActions.getSearchList(this.state.search);
}
class FriendList extends React.Component {
constructor(props) {
super(props);
this.state = FriendStore.getState();
this.onChange = this.onChange.bind(this);
this.filterByUsername = this.filterByUsername.bind(this);
// limit this function every 200 ms
this.onSearch = debounce(this.onSearch, 200);
}
componentDidMount () {
FriendStore.listen(this.onChange);
FriendActions.getFriendsList();
}
componentWillUnmount() {
FriendStore.unlisten(this.onChange);
}
onChange(state) {
console.log(state);
this.setState(state);
}
onSearch(event){
this.setState({search: event.target.value});
if (this.state.search !== '')
FriendActions.getSearchList(this.state.search);
}
1 ответ
Вы должны изменить свою логику. Примерно так должно работать:
onSearch(event){
var search = event.target.value;
if (search !== '') {
FriendActions.getSearchList(search);
}
this.setState({search: search}); // w/ ES6: this.setState({search});
}
Вы правы в том, что setState
не сразу. Причина в том, что вы можете иметь много setState
звонки в вашем коде. Реакт будет работать render
на setState
, По причинам производительности он ждет пока все setState
Звонки сделаны, затем оказывает.
Альтернативное решение (не рекомендуется): установите свое состояние вручную
this.state = 'whatever';
и обновить себя
this.forceUpdate();