这种set*
嵌套有什么缺点吗?:
const [foo,setFoo] = useState(0)
const [bar,setBar] = useState([])
...{
setFoo(lastFoo=>{
if(lastFoo>0)
setBar(lastBar=>{
...
return [...lastBar,lastFoo]
})
return 0
})
}
当useState
-s是自定义钩子的一部分时,这很有用,
并且我们可以获得不错的钩子组成。
const handleBar = useBarSync() // with state
...
setFoo(lastFoo=>{
handleBar(lastFoo)
return 0
})
另一方面,最好使用单个useState
或useReducer
管理复杂状态,
更新是原子的,似乎更可靠。
const [state,setState] = useState({foo:0,bar:[]})
const handleBar = useBarSync() // no state
...
setState(last=>{
const foo = 0
const bar = handleBar(last.foo)(last.bar)
return ({foo,bar})
})
但是同时具有钩子组成和状态组成 似乎很冗长,可读性较差。