3 回答
TA贡献1886条经验 获得超2个赞
您的代码是正确的,但状态并未立即放置,因此当您调用控制台日志时,该值尚未准备好,但如果您在 html 中显示该数据,则这不会成为问题
对您的代码进行了一些更改和少量组织
export default Test = {
const [ posts, setposts] = useState([]);
useEffect(()=>{
fetch('https://jsonplaceholder.typicode.com/posts')
.then(result => result.json())
.then((data)=>{
console.log(data); // Will be written because you are already at the end of the promisse
setposts(data);
console.log(posts); // Will be empty cuz the async load of state
});
},[])
return (
<>
{posts.map(post => (
<ul>
<li key="{post.id}">{post.title}</li>
</ul>
))}
</>
)
}
TA贡献1798条经验 获得超3个赞
基本上,react 不会立即更改状态,
如果您想看到状态确实发生了变化,请尝试渲染帖子,例如(我知道,这是一个糟糕的例子):
... return ( <div>{JSON.stringify(posts)}</div> )
TA贡献1797条经验 获得超6个赞
useState API 没有像 React 类中的 setState 那样的回调。为了等待状态更新完成,您所能做的就是使用 useEffect 挂钩,如下所示
useEffect(()=>{
fetch('https://jsonplaceholder.typicode.com/posts',{
method:'get',
}).then(result=>{
return result.json();
}).then((data)=>{
console.log(data);
setposts(data);
console.log(posts);
})
},[data])
添加回答
举报