【发布时间】:2021-09-05 16:15:11
【问题描述】:
我想存储"jokes" 并在每次间隔5 秒后运行(进行get 调用)时控制台记录一个新值。但是,在每个间隔之后,该值不会呈现任何内容。我不确定是否正在调用和捕获笑话,因为它打印为JOKE: []。我的最终目标是使用"joke" 状态创建逻辑。
如果你想自己测试,https://codesandbox.io/s/asynchronous-test-mp2fq?file=/AutoComplete.js
const [joke, setJoke] = React.useState([]);
React.useEffect(() => {
const interval = setInterval(() => {
axios.get("https://api.chucknorris.io/jokes/random").then((res) => {
setJoke(res.data.value);
console.log("JOKE: ", joke); // <- Doesn't print every time it is called.
});
console.log("Every 5 seconds");
}, 5000);
if (joke.length !== 0) {
clearInterval(interval);
console.log("Returns True");
}
return () => clearInterval(interval);
}, []);
【问题讨论】:
-
原因是 setState 的调用是异步的 - 不要依赖 this.state 在调用 setState 后立即反映新值。
标签: javascript reactjs react-hooks state