const [fields, setfields] = useState([0]);
function change(){
setTimeout(()=>{
setfields([...fields, 1])
},100)
setTimeout(()=>{
setfields([...fields, 2])
},500)
}
useEffect(() => {
console.log(123,fields )
}, [fields]);
<Button onClick={change}>change</Button>
如何实现输出[0, 1, 2]
原因其实在
react
的官方文档里面有提到也就是组件内部的函数拿到的总是定义它的那次渲染中的props和state,文档里面也提到了解决办法:
解决办法1
你的代码修改之后:
相关文档链接:为什么我会在我的函数中看到陈旧的 props 和 state ?
也推荐一篇解析文章,很清晰得解析了这个问题:useEffect 完整指南
解决办法2
第二个解决办法就是楼上提到的方法,文档中是这么说的。
相关文档链接:函数式更新