Javascript React hooks-等待状态更新
我正在使用useState()钩子,我发现我的应用程序有一个bug,因为设置值是异步的。如果我有这样的代码:Javascript React hooks-等待状态更新,javascript,html,reactjs,typescript,Javascript,Html,Reactjs,Typescript,我正在使用useState()钩子,我发现我的应用程序有一个bug,因为设置值是异步的。如果我有这样的代码: const [data, setData] = useState([]) useEffect(() => { const getData = async () => { const res = await fetchData() console.log(data); // [] setData(res.data.hits);
const [data, setData] = useState([])
useEffect(() => {
const getData = async () => {
const res = await fetchData()
console.log(data); // []
setData(res.data.hits);
console.log(res.data.hits); // Array full of objects
console.log(data); // Still []
}
getData()
}, [fetchData]);
如何仅在新状态已实际设置时执行某些特定逻辑?您可以使用
useffect
:
这将在每次
数据更改时触发内部内容。您可以使用useffect
:
这将在每次数据
更改时触发其内部内容。即使它不是异步的,数据
仍然使用常量
声明-它不会更改您想要什么样的“执行某物”?副作用,比如API调用?还是要更改渲染的内容或其他内容?添加一个新的效果以监视数据为什么不使用条件渲染?一旦数据可用,它就会执行。@CertainPerformance当状态更新时,setState方法有一个回调。我正在寻找类似的东西。即使它不是异步的,数据
仍然是用常量
声明的-它不会改变你想要什么类型的“执行某物”?副作用,比如API调用?还是要更改渲染的内容或其他内容?添加一个新的效果以监视数据为什么不使用条件渲染?一旦数据可用,它就会执行。@CertainPerformance当状态更新时,setState方法有一个回调。我正在寻找类似的东西。总的来说-是的,这是正确的答案。但我的具体问题是,我有另一个useffect(),它依赖于其他不同的属性,当它被触发时,它仍然具有数据变量的旧状态
使用res
作为参数,将执行您想要的逻辑?不完全是,因为我想要执行的逻辑是另一个useffect()调用具有其他变量作为依赖项的。并将数据添加为其他useEffect的依赖项?我不希望每次“数据”更改时都运行其他useEffect。通常-是的,这是正确的答案。但我的具体问题是,我有另一个useffect(),它依赖于其他不同的属性,当它被触发时,它仍然具有数据变量的旧状态
使用res
作为参数来执行您想要的逻辑?不太可能,因为我想要执行的逻辑是另一个useffect()调用,它有其他变量作为依赖项。并将数据添加为另一个useffect的依赖项?我不希望每次“数据”更改时都运行另一个useffect。
useEffect(() => {
//your code
}, [data]);