PolyakhAleksandr
@PolyakhAleksandr

ReactJS, как получить nextState, приходит в this.state прошлое значение state(полностью готовый пример)?

Откройте консоль введите в два поля значение, когда они больше или равны 8, меняем класс кнопки, но когда происходит проверка на длину, и мы уберем один символ, в state у нас по факту 7 но при получении длины у нас 8 и состояние кнопки остается активное, через setTimeout работает но это костыль.
Спасибо за помощь, готовый компонент тут => stackblitz.com/edit/template?file=components%2FForm.js
Откройте консоль, можно увидеть длину поля логин.
!!! Итоговый результат, когда у нас в поле 8 символов один мы убрали у нас 7 убрать активный класс у кнопки.
Спасибо, постарался максимально подробно описать проблему.
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
setState асинхронная функция и в нее можно передать колбек вторым аргументом:
this.setState({ ... }, () => this.getStateValues());


По-хорошему вам следует переписать хандлер, так как вы создаете новые копии каждый рендер, тем более вы передаете свойство name в инпуты, но почему-то не используете в хандлере.
Перепишите так:
handleChange = ev => {
   const { name, value } = ev.target;
   const symbols = split('')(value);
   const result = filter(i => characterVerification(i), symbols);

   this.setState({
     [name]: join('')(result)
    }, () => this.getStateValues(),
  );
};


Еще непонятно зачем было тянуть в проект ramda.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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