跳到主要内容

一个react数据更新的疑问

如代码所示

  const [cpu, setCPU] = useState({time: [], idle: [], system: [], user: [] }) 
const processCPU = (data) => {
const newCPU = _.cloneDeep(cpu)
newCPU.time.push(moment(data.timestamp).format("hh:mm:ss"))
for(const k in data.vals){
newCPU[k].push(data.vals[k])
}
setCPU({...newCPU})
}

3秒钟调用一次processCPU这个函数,为什么 const newCPU = _.cloneDeep(cpu) 中访问的cpu基本是旧的state值。

  const [cpu, setCPU] = useState({time: [], idle: [], system: [], user: [] }) 
const processCPU = (data) => {
setCPU(prevState => {
const newCPU = _.cloneDeep(prevState)
newCPU.time.push(moment(data.timestamp).format("hh:mm:ss"))
for(const k in data.vals){
newCPU[k].push(data.vals[k])
}
return {...newCPU}
})
}

这样使用setState(prevState => {})就起作用。react更新state是异步更新,并不能立刻更新值,但是3秒中之后再次调用函数应该早就更新完了,那为什么直接访问state还是旧的值呢?

网站备案:蜀ICP备2023001425号👏 Powered By Docusaurus, Semi Design