setState не работает для нажатия кнопки React [duplicate]

38
задан martins 2 March 2016 в 06:55
поделиться

3 ответа

Из реакционных документов:

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 ...
    }
)
103
ответ дан Felix Kling 19 August 2018 в 06:02
поделиться

Вам нужно установить начальное состояние вашего компонента, попробуйте добавить следующее к вершине вашего компонента.

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);
    }
});
2
ответ дан Kirankumar Dafda 19 August 2018 в 06:02
поделиться
  • 1
    Извините, я не включил getInitialState в свой первоначальный пост. Обновлено сообщение, чтобы добавить больше кода. – martins 7 April 2015 в 11:53
  • 2
    никаких проблем, я обновляю свой ответ. Надеюсь, поможет..;) – deowk 7 April 2015 в 12:06
0
ответ дан Think-Twice 30 October 2018 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: