在基于类的组件中:
componentDidMount() {
axios.get('https://jsonplaceholder.typicode.com/posts').then((res) => {
this.setState({
posts: res.data.slice(0, 10)
});
console.log(posts);
})
}
我试过这个:
const [posts, setPosts] = useState([]);
useEffect(() => {
axios.get('https://jsonplaceholder.typicode.com/posts').then((res) => {
setPosts(res.data.slice(0, 10));
console.log(posts);
})
});
它创建了一个无限循环。如果我将 []/{} 作为第二个参数 [1][2] 传递,那么它会阻止进一步的调用。但它也阻止了数组更新。
[1] useEffect 中的无限循环
[2] 如何用 React useEffect 只调用一次加载函数
原文由 Mahmudul Haque 发布,翻译遵循 CC BY-SA 4.0 许可协议
将一个空数组作为第二个参数提供给
useEffect
以表明您只希望效果在初始渲染后运行一次是可行的方法。console.log(posts);
显示一个空数组的原因是因为posts
变量仍然引用初始数组,而setPosts
也是异步的,但是如果在渲染中使用,仍然可以按您的意愿工作。例子