Задать вопрос
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')
        );
  • Вопрос задан
  • 1550 просмотров
Подписаться 1 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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