dkvasov
@dkvasov

Почему React отстает на шаг?

Есть 2 инпута, в которые я ввожу числа, при onChange должна выводится сумма, по дефолту все значения = 0. проблема в следующем: если ввожу "1" в первое поле, то ничего не происходит, если ввожу еще одну единицу, то в результате сложения имею 1, вместо 11. т.е. операция сложения происходит с прошлым значением, если во второе поле ввести 2, то результат будет 11 вместо 13 и т.д. В чем проблема?
сделал вывод значений, которые вводятся в инпуты, тут всё ок. а суммируются значения из прошлого шага. В консоль выводятся тоже старые значения.

var Calc = React.createClass({
          getInitialState: function() {
            return {
              a: 0,
              b: 0,
              result: 0
            };
          },

          setValueA: function(event) {
            var val = event.target.value;
            this.setState({
              a: val
            });

            console.log("a", this.state.a, this.state.b);
            this.doCalc();
          },

          setValueB: function(event) {
            var val = event.target.value;
            this.setState({
              b: val
            });

            console.log("b", this.state.a, this.state.b);
            this.doCalc();
          },

          doCalc: function() {
            var res = parseInt(this.state.a) + parseInt(this.state.b)

            this.setState({
              result: res
            })
          },

          render: function() {
            return (
              <div>
                <input type="text" className="search-field" onChange={this.setValueA} />
                <input type="text" className="search-field" onChange={this.setValueB} />
                <div>
                  {this.state.a}
                  <br/>
                  {this.state.b}
                  <br/>
                  =
                  {this.state.result}
                </div>
              </div>
            );
          }
        });
        ReactDOM.render(
          <div>
            <Calc />
          </div>,
            document.getElementById('content')
        );
  • Вопрос задан
  • 1425 просмотров
Решения вопроса 1
Ссылка
Там написанно
React does not guarantee that the state changes are applied immediately.

setState() does not always immediately update the component. It may batch or defer the update until later.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы