dkpage
@dkpage
Учусь

Почему не обновляется значение в useState?

есть такой код:

const [checked, setChecked] = useState(false);

const handleClearField = () => {
        if (checked) {
            console.log('1');
        } else {
            console.log('2');
        }
    };

return (
<>
    <FormControlLabel
       control={
          <Checkbox
              checked={checked}
              onChange={(_, checked) => {
                    setChecked(checked);
                    handleClearField();
              }}
           />
       }
        label="Тест"
     />
</>
);


Когда ставлю true в useState, выводит console.log('2');
И checked равняется false, а должен true
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега React
onChange={(_, checked) => {}}
С чего вы взяли, что функция в onChange принимает второй аргумент?

setChecked(checked);
Это асинхронное действие, оно не блокирует поток исполнения до тех пор, пока значение в state изменится.

handleClearField();
Следовательно, при вызове этой функции вы работаете ещё с текущим значением, а не с новым.

Один из возможных вариантов решения:
const [checked, setChecked] = useState(false);

const handleClearField = (checked) => {
    setChecked(checked);

    if (checked) {
        console.log('1');
    } else {
        console.log('2');
    }
};

return (
  <>
    <FormControlLabel
       control={
          <Checkbox
              checked={checked}
              onChange={(event) => handleClearField(event.target.checked)}
           />
       }
        label="Тест"
     />
  </>
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 16:06
100000 руб./за проект
06 мая 2024, в 15:53
2500 руб./за проект
06 мая 2024, в 15:52
30000 руб./за проект