React useState обновляется в инструментах разработки, но не в консоли

Привет у меня есть эта функция

   const [mouseIsDown, setMouseDown] = useState(true);

   function handleMouseUp() {
        console.info('mouseUp')
        console.info(mouseIsDown)
        setMouseDown(false);
        setInterval(() => {
            console.info(mouseIsDown)
        }, 1000)

    }

и когда он срабатывает, он регистрирует:

- mouseUp
- true
- true
- true
- true
- true
...

Но инструменты разработчика реакции показывают, что mouseIsDown на самом деле является ложным, но когда я регистрирую его значение в интервале, он все равно регистрирует истинный, когда я устанавливаю значение мышьIsDown в ЛОЖЬ.

Я понятия не имею, почему это так, любая помощь приветствуется: D

setMouseDown на самом деле не меняет значение mouseIsDown. Он применяется асинхронно, и вы не увидите отраженного изменения, пока функция вашего компонента не будет вызвана снова и снова не вызовет useState.
selbie 20.03.2022 00:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина в этой строке

setInterval(() => {
     console.info(mouseIsDown)
}, 1000)

когда вы используете такой интервал, внутренняя часть функции похожа на «моментальный снимок» текущего состояния. вот почему вы всегда получаете начальное значение mouseIsDown.

чтобы исправить это, вам нужно использовать useRef в качестве эталонного значения, чтобы сохранить текущее состояние внутри интервала.

новый код:

const [mouseIsDown, setMouseDown] = useState(true);
const mouseIsDownRef = useRef();
mouseIsDownRef.current = mouseIsDown; //this will set the current value

function handleMouseUp() {
        console.info('mouseUp')
        console.info(mouseIsDown)
        setMouseDown(false);
        setInterval(() => {
            console.info(mouseIsDownRef?.current)
        }, 1000)

    }

Это работает :D, но могу я спросить, что за ? делает в console.info(mouseIsDownRef**?**

simp you 20.03.2022 00:33

здорово :) -- это сокращение от этого -> imouseIsDownRef.current ? imouseIsDownRef.current : null

Roey Zada 20.03.2022 00:36

Другие вопросы по теме

React показывает отфильтрованное состояние при нажатии с помощью useReducer
Почему не работает сортировка в функции setSomething хука useState?
Есть ли способ добавить другое значение к ключу в объекте в React?
Как использовать вывод одного запроса axios в качестве зависимости для другого при рендеринге компонентов в React?
Реагировать на ввод, я определил состояние в начальное состояние, но все равно получаю предупреждение о смене неконтролируемого на контролируемый ввод
Как передать setState в другую функцию и использовать его для целевого значения из выбора материала-интерфейса и обработки изменения, ошибка «значение не определено»
Бесконечный цикл в реакции и socket.io
Снимите флажок (удалив) последний элемент в флажке и одновременно отметьте (добавьте) другой, сохраните непроверенное значение и добавьте другое отмеченное значение
Хук React useState всегда становится неопределенным при установке его в useEffect
Typescript Тип React useState второй параметр