我在 React useState 方面遇到了一个相当具体的问题。我正在使用 useState 钩子声明新状态:
const [dialogData, setDialogData] = useState(null);
当我通过 setDialogData(newState)
设置新状态时,一切正常,直到调用任何 history.push()
。之后,当我尝试使用 setDialogData
方法设置状态时,逻辑被忽略且不会被触发。例如对于这样的代码片段:
setDialogData((prev) => {
console.log('setDialogData entered');
return newState;
}
不会打印“输入的setDialogData”。
我不确定这是否重要,但就我而言,setDialogData
在注册为 signalR 接收消息处理程序的回调方法中调用。
编辑 这是实际代码:
const handleOperationRequested = (response) => {
setDialogData((prev) => {
console.log('setDialogData entered');
return {
isOpen: true,
id: response.id,
name: response.name
};
});
};
handleOperationRequested
在 signalR 中注册为消息处理程序:
this.hubConnection.on('operationRequested', (res) => handleOperationRequested(res));
这是我能够展示的所有代码,因为公司隐私政策,但这是与该案例相关的代码中的所有内容。正如我所提到的,在调用 history.push()
中的 react-router-dom
之前,这是有效的。之后不再打印“setDialogData enter”,也不会更新状态。