Pét*_*inn 5 socket.io reactjs react-hooks
在使用 dispatch 更新 useReducer 状态后,我需要能够立即执行操作。但是 dispatch 运行异步所以当我运行我的下一段代码时,它在 dispatch 应该更新它之前使用旧状态。
我尝试过的是使用 useEffect(()=>{},[state]),但它只是在每次状态更新时运行。我需要根据条件执行某些操作......不仅仅是每次状态更新时。
// Let's update some stuff on the server with new data!
const handleFinishOrder = () => {
dispatch({ type: "finish-order", payload: id }); // Set some fields to null
socket.emit("request-update-live-data", state); // Old state gets sent to server :(
};
Run Code Online (Sandbox Code Playgroud)
我希望在我将状态发送到服务器时更新状态,但发送的实际状态是旧状态。
dispatchdispatch是异步处理的,API 不提供任何在执行后执行一段代码的方法。
事实上,如果您尝试将回调函数传递给以下内容,它会特别发出警告dispatch:
警告:来自 useState() 和 useReducer() Hook 的状态更新不支持第二个回调参数。要在渲染后执行副作用,请使用 useEffect() 在组件主体中声明它。
因此,您应该socket.emit在useEffect适当的依赖项列表中进行操作。
或者,您可以在特定操作类型的减速函数中执行此操作。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |