【发布时间】:2021-01-31 13:47:45
【问题描述】:
我在更新 React 中的计数器状态时遇到问题。澄清一下——我使用了两种状态,一种是计数器,另一种是 id-counter(基本上相同的想法和结构)。在我的渲染 jsx 中,我得到了这个:
<button onClick={incCounter}></button>
<button onClick={decCounter}></button>
<button onClick={addItem}></button>
我包含 incCounter 和 decCounter 的原因是我对它们如何正常工作感到困惑,而 ID 计数器却没有。代码如下:
const [items, setItems] = useContext(ItemsContext)
const [counter, setCounter] = useState(0)
const [id, setId] = useState(0)
const incCounter = () => {
setCounter(counter + 1)
}
const decrementQuantity = () => {
setCounter(counter - 1)
}
这是有问题的部分,由于某种原因无法正常工作(id 始终为 0):
const addItem = () => {
if (!(items.some(item => item.name === props.name))) {
setId(id + 1)
setItems(prevItems => [...prevItems, { id: id, name: props.name}])
}
}
注意:我尝试将 setId 移到 if 语句上方,没有结果。
【问题讨论】:
-
我觉得应该是
setId(prevState => prevState+1)(你需要访问并增加之前的状态值,而不是直接访问为id) -
@OzgurSar 我也试过了,没有效果。 ://
-
我不明白有多少柜台。您还应该修复从
setCounter(counter + 1)到setCounter(prev => prev + 1)的增加和减少功能 -
问题是状态没有同步更新。当您调用 setId 时,并不能保证 id 会很快更新到您的项目将使用新值。
-
您可以在重新渲染后使用
useEffect运行副作用,但由于您有很多计数器,这并不是一个真正的好方法
标签: javascript reactjs counter react-state