В разделе часто задаваемых вопросов Reach Hooks Как прочитать часто меняющееся значение из useCallback? вот пример:
function Form() {
const [text, updateText] = useState('');
const textRef = useRef();
useEffect(() => {
textRef.current = text; // Write it to the ref
});
const handleSubmit = useCallback(() => {
const currentText = textRef.current; // Read it from the ref
alert(currentText);
}, [textRef]); // Don't recreate handleSubmit like [text] would do
return (
<>
<input value={text} onChange={e => updateText(e.target.value)} />
<ExpensiveTree onSubmit={handleSubmit} />
</>
);
}
Я был так сбит с толку:
- Вместо того чтобы useCallback обновлял функцию каждый раз при изменении текста, этот код перемещает ее в textRef в useEffect. Но разве это не то же самое, потому что функция обратного вызова не меняется, но вам все еще нужен 1 шаг, чтобы обновить значение в useEffect?
- Почему textRef находится в массиве зависимостей? Разве textRef не является ссылкой, которая не меняется между рендерами? Мы всегда получаем одну и ту же ссылку, разве это не будет похоже на ввод пустого массива?