Я не могу понять, почему вы используете setTimeout
, может быть, вы знаете, что this.setState
является асинхронной функцией, и вы использовали setTimeout
для обработки действия после изменения состояния. если это ваша цель, вы должны написать это следующим образом:
doThing = () => {
this.setState(
{
test: 'Zest'
},
() => {
console.log(this.state.test) // **
}
);
}
На самом деле, исходя из ReactJS документов , setState
может получить обратный вызов. поэтому, если вы хотите сделать что-то сразу после изменения состояния, используйте функцию обратного вызова setState
.
NOW для компонента Function
Для того, чтобы описанная выше ситуация для компонента функции была написана, как показано ниже :
import React, { useState, useEffect, useCallback } from 'react';
const FunctionComponent = () => {
const [test, setTest] = useState('');
const doThing = useCallback(() => {
setTest('Zest');
}, []);
useEffect(() => {
console.log(test) // here is exactly like **
}, [test]);
return (
<div // etc...
);
};
Функция doThing
создается только один раз при монтировании FunctionComponent
, потому что мы используем useCallback
и передаем []
зависимость от нее. тогда обратный вызов useEffect
часто выполняется сразу после изменения состояния test
.