Javascript 调用时使用旧状态的回调
我有一个模式,在其中传入OnConfigRM回调,该回调在用户单击确认按钮时触发。我看到的问题是,这个函数中的状态不是当前状态,而是初始应用程序状态 app.jsJavascript 调用时使用旧状态的回调,javascript,reactjs,use-effect,use-reducer,Javascript,Reactjs,Use Effect,Use Reducer,我有一个模式,在其中传入OnConfigRM回调,该回调在用户单击确认按钮时触发。我看到的问题是,这个函数中的状态不是当前状态,而是初始应用程序状态 app.js const discardClaim = async () => { try { // Showing undefined here? if (state.claim) { await api.discard(state.claim.id); }
const discardClaim = async () => {
try {
// Showing undefined here?
if (state.claim) {
await api.discard(state.claim.id);
}
// Close confirmation
dispatch({ type: "CLOSE_DISCARD_MODAL" });
} catch (error) {
// handle error
}
};
const handleDiscard = () => {
// Set confirmation
const modalSettings = {
confirmTitle: "MyTitle",
confirmMessage: "Are you sure?",
onConfirm: discardClaim
};
dispatch({ type: "OPEN_DISCARD_MODAL", payload: discardModal });
};
useEffect(() => {
if (state.handleDiscard === undefined) {
dispatch({ type: "SET_HANDLERS", payload: { handleDiscard } });
}
}, []);
在ConfirmationModal.jsx中,我执行以下操作:
const { confirmTitle, confirmMessage, onConfirm } = modalSettings;
<Button color="red" text={confirmButton} onClick={onConfirm} />
const{confirmTitle,confirmMessage,onConfirm}=modalSettings;
我的状态提供程序如下所示:
const [state, dispatch] = useReducer<state, any>(reduce, {
data: [],
claim: null,
});
const[state,dispatch]=useReducer(reduce{
数据:[],
索赔:无效,
});
当我尝试在确认模式内调用
onConfirm
时,我只得到初始状态,现在是最新状态。哪里是onConfirm
?你怎么称呼它?请提供一个可复制的示例,而不是片段onConfirm
是modalSettings
内部handleDiscard
的一部分。那么问题是什么claim
是null
,您在哪里更改它?是的,所以当应用程序加载claims:[数据,数据,数据]
时,有一个新的道具claim:{//selected object}
但是,我只是将初始状态返回到OnConfigrm
中。它不显示当前状态,只显示初始状态。你能制作一个codesandbox或可复制的示例吗?这段代码没有说太多。