【发布时间】:2019-08-13 13:13:52
【问题描述】:
根据React docs:
当你有复杂的情况时,useReducer 通常比 useState 更可取 涉及多个子值或下一个状态时的状态逻辑 取决于上一个。
1.有人能解释一下为什么useReducer 没有同步更新状态吗?
const reducer = (state, action) => {
if( action.type === 'ADD_VALUE') {
console.log(`STATE IN REDUCER`, [...state, action.path]) // => ["1.1"]
return [...state, action.path]
}
}
const [state, dispatch] = useReducer(reducer, [])
<input type="button" onClick={() => {
dispatch({ type: 'ADD_VALUE', path: "1.1"})
console.log(`STATE`, state) // => []
// here i want to do some stuff based on the lastest updated state (["1.1"] and not [])
// for example dispatch an action with redux
}}/>
2.我怎样才能根据最新的更新状态(["1.1"] 而不是[])做一些事情(发送redux 操作)?
【问题讨论】:
-
状态不会同步更新,即使是React也不会改变当前状态,所以
state是对之前状态的引用。 -
因为state updates are asynchronous。 99.9% 肯定使用钩子不会改变这一点。此外,正如@Tholle 所说,您所指的
state无论如何都会过时。 -
@Tholle 以及如何解决这个问题(查看问题的第二部分)
-
@T.J.Crowder 那怎么解决呢?
-
@Youssef - 当状态改变时,你的组件会被重新渲染。所以像往常一样根据状态进行渲染。
标签: javascript reactjs