我有一个异步函数,它从API获取一些数据。由于我需要这些数据来正确加载我的组件,我决定在useEffect中获取数据,然后将其存储在一个运行良好的useState中。然而,如果我尝试对其进行控制台日志记录,它只会显示其初始状态,从技术上讲,这意味着它仍然未设置,或者控制台日志在分配useState之前运行。
感谢您提前提供的帮助。
const [categories, setCategories] = useState([])
useEffect(() => {
fetchListProductCats().then(function(result){
setCategories(result.data)
})
console.log(categories) // returns -> []
}, []);
if(!categories.length){
return "loading"
}
async
函数与Promise,确保您知道它的含义。
此代码中的console.log
行始终在Promise解析之前运行。
如果您想观察类别的变化,请使用另一个useEffect
:
useEffect(() => {
console.log(categories);
}, [categories]);
您的状态已经用您想要的数据更新了,它显示了具有初始值的类别,因为您已经呈现了没有依赖关系的useEffect。在更新之前,它得到了安慰。请尝试使用以下代码段进行日志记录。
useEffect(() => {
console.log(categories)
}, [categories]);
setState
是异步的。它不会在调用函数后立即更新。它将首先经过重新渲染过程来更新用户界面。一旦重新渲染完成,就会调用useEffect
钩子中提供的函数。
useEffect(()=>{
console.log(categories)
}, [categories])