Javascript 反应:Can';t将useState设置为对象数组。控制台日志显示未定义
我正在使用react和mongoose/mongo数据库。在页面加载时,我执行一个API调用并接收一个对象数组(它们是带有标题、描述等的“帖子”)。我试图映射数据,以便在单独的卡片上动态显示帖子信息。我可以从API调用中获取数据,但是当我尝试将状态更改为对象数组并将其记录到控制台日志中时,我得到了未定义的数据 附件是代码和结果的照片: 为什么usestate不接受来自数据的状态更改?附件是我的代码:Javascript 反应:Can';t将useState设置为对象数组。控制台日志显示未定义,javascript,reactjs,use-effect,use-state,Javascript,Reactjs,Use Effect,Use State,我正在使用react和mongoose/mongo数据库。在页面加载时,我执行一个API调用并接收一个对象数组(它们是带有标题、描述等的“帖子”)。我试图映射数据,以便在单独的卡片上动态显示帖子信息。我可以从API调用中获取数据,但是当我尝试将状态更改为对象数组并将其记录到控制台日志中时,我得到了未定义的数据 附件是代码和结果的照片: 为什么usestate不接受来自数据的状态更改?附件是我的代码: import React,{useState,useffect}来自“React” 从“./
import React,{useState,useffect}来自“React”
从“./utils/API”导入API
常量Home=()=>{
const[PostObject,setPosts]=useState({
标题:“,
说明:“,
图像:“
})
const[PostList,setList]=useState()
useffect(()=>{
检索职位()
}, [])
常量handleInputChange=(e)=>{
e、 预防默认值()
setPosts({…PostObject[e.target.name]:e.target.value})
}
const createPost=(e)=>{
e、 预防默认值()
setPosts({…PostObject,标题:,描述:,图像:})
API.addPost(PostObject)
。然后(retrievePosts())
}
const retrievePosts=()=>{
API.getPost()
。然后(res=>{
console.log(res.data);
设置列表(资源数据)
console.log(PostList);
})
}
为什么usestate不接受来自数据的状态更改?随附的是我的代码:
因为您在useffect
中附加了一个空的依赖项数组,如下所示:
useEffect(() => {
retrievePosts()
}, [])
如果传递空的依赖项数组,此useEffect将只调用一次。如果要在每次数据更改后运行useEffect
,则必须将数据传递到依赖项数组:
useEffect(() => {
retrievePosts()
}, [data /*i.e PostList*/])
但是,请注意不要无限次地重新渲染组件
还有一件事:
我可以从API调用中获取数据,但是当我尝试将状态更改为对象数组并将其记录到控制台日志中时,我得到了未定义的数据
setState
是一个异步调用。在调用setData
后不能立即记录数据。请查看文章或to,看看它们是否有帮助。然后(retrievePosts())应该是。然后(retrievePosts)
@CertainPerformance,更正了更改。仍然未定义。请将setState调用排入队列,因此不会立即更新,它将更新状态并重新呈现组件,以便使用新数据绘制组件