此问题已在此处有答案:
Why does calling react setState method not mutate the state immediately?(10个答案)
昨天关门了。
import React,{ useState,useEffect } from 'react'
import './App.css'
const App = () => {
const [item, setItems] = useState('');
const [list, setList] = useState([]);
const handleChange = (e) =>{
setItems(e.target.value)
}
const addItems = () =>{
setList((old) => {
return [...old,item]
});
setItems('');
console.log(list);
}
return (
<div>
<h1>todo</h1>
<input onChange={(e) => handleChange(e)} value={item} />
<button onClick={() => addItems()}>Add</button>
</div>
)
}
export default App
这是一个待办事项列表应用程序。我可以做什么来立即更新addItems()函数。每当我调用addItems()时,旧的值就会返回。
3条答案
按热度按时间gcxthw6b1#
你可以使用useEffectHooks在更新状态值后获取更新的状态。并从addItems函数中删除列表控制台日志。
djmepvbi2#
即使您添加延迟,更新也不会立即反映。下面的示例为useState引入了一个下降时间延迟,以完成异步操作。我们仍然看到旧的国家价值。因为状态变量仍然属于旧闭包。
推荐的解决方案是使用useEffect钩子来反映任何状态更改
5kgi1eie3#
状态的改变将仅在下一个
render()
中可见。如果你想立即改变,你可以使用useRef();
。useRef
类似于useState,但不会立即触发重新呈现和更改。