state вызывает ререндер и используется для UI. ref сохраняет значение между рендерами, но не вызывает обновление интерфейса. Локальные переменные пересоздаются при каждом рендере и не сохраняют состояние. Каждый инструмент решает свою задачу и не является взаимозаменяемым.
state вызывает ререндер и используется для UI. ref сохраняет значение между рендерами, но не вызывает обновление интерфейса. Локальные переменные пересоздаются при каждом рендере и не сохраняют состояние. Каждый инструмент решает свою задачу и не является взаимозаменяемым.
В React существует три принципиально разных способа хранения данных, и выбор влияет на поведение компонента.
stateРеактивный
Хранится между рендерами
Изменение → ререндер
const [count, setCount] = useState(0);
Используется для:
отображаемых данных
логики UI
состояния формы
refМутабельный
Хранится между рендерами
Изменение не вызывает ререндер
const prevValue = useRef(null);
Используется для:
DOM-элементов
таймеров
предыдущих значений
флагов, не влияющих на UI
Создаются заново при каждом рендере
Не сохраняют состояние
Подходят только для вычислений
const doubled = count * 2;
state — источник правды для UI
ref — хранилище “между рендерами”
локальные переменные — одноразовые
Если данные должны жить между рендерами и влиять на UI — state.
Если должны жить, но не влиять на UI — ref.
Если нужны только для текущего вычисления — локальная переменная.