【发布时间】:2021-01-14 13:35:03
【问题描述】:
假设您可以在更改当前状态时通过传递箭头函数(如下面的秒表函数)访问先前的状态:
function App() {
const [time, setTime] = useState(0)
function counter() {
setTime(prev => prev + 1)
}
return (
<div>
<p>{time}<p>
<button onClick={counter}>Click Me<button/>
</div>
)
}
当状态是一个对象时我可以做同样的事情吗?这是我遇到的语法问题还是无法完成? 有问号的地方写什么?
function App() {
const [time, setTime] = useState({sec: 0, min: 0, hour: 0})
function stopwatch() {
setTime(prev??? => ????)
}
return (
<div>
<p>{time.sec} {time.min} {time.hour}<p>
<button onClick={stopwatch}>Click Me<button/>
</div>
)
}
```
【问题讨论】:
-
只返回一个新对象
setTime(prev=>({...prev, hour:prev.hour+1}))。例如,我只是增加了小时......使用你自己的逻辑来做你需要的事情 -
谢谢@charlietfl!这正是我想要的。
-
我只想指出一个小而微妙但重要的细节,包括功能状态更新。您实际上访问当前状态并返回下一个状态。把它想象成一个超轻的“reducer”,而不是(当前状态,动作)=>下一个状态,你已经(当前状态)=>下一个状态。
标签: javascript reactjs react-hooks use-state react-state