@ArgeoMer

Почему useRef работает неверно?

Почему значение t обновляется раньше, строки с обновлением? У меня какой-то взрыв из-за этого в голове
import "./styles.css";
import {useState, useRef, useEffect} from 'react'

function UseMe() {
  const t = useRef(23)
  console.log(t, 0)
  useEffect(() => {
    console.log(t, 1)
    t.current +=1
    console.log(t, 2)
  })
}

export default function App() {
  const q = UseMe()
  return (
    <div/>
  );
}


вот вывод в консоль:63e658e33a020286979941.jpeg
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
@slide13
frontend/web-developer
Проблема не в useRef, проблема в том как работает console.log. Если в console.log передается объект, то он выводится по ссылке, в итоге получается, что когда обновляется ref, то браузер автоматом обновляет его в консоли.
Чтобы проверить, что useRef работает как надо - достаточно вывести current значение из ref, т.е. console.log(t.current, 0)
Если же нужно вывести именно объект на момент его логирования, то можно привести объект к строке и снова собрать в объект:
console.log(JSON.parse(JSON.stringify(t, 0)))

На MDN можно почитать про это
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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