Есть ли у этого типа 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
, где обновление - atomi c и кажется более надежным.
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})
})
Но одновременное использование как композиции-крючка, так и композиции состояний кажется многословным и менее читаемым.