Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用时使用旧状态的回调_Javascript_Reactjs_Use Effect_Use Reducer - Fatal编程技术网

Javascript 调用时使用旧状态的回调

Javascript 调用时使用旧状态的回调,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); }

我有一个模式,在其中传入OnConfigRM回调,该回调在用户单击确认按钮时触发。我看到的问题是,这个函数中的状态不是当前状态,而是初始应用程序状态

app.js

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或可复制的示例吗?这段代码没有说太多。