Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 基于redux请求更改处理页面刷新的正确方法_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 基于redux请求更改处理页面刷新的正确方法

Javascript 基于redux请求更改处理页面刷新的正确方法,javascript,reactjs,redux,Javascript,Reactjs,Redux,我已经创建了一个redux,它将请求一个API,如果结果是200,我想使用历史将用户重定向到另一个页面 问题是:如果行动成功,我不知道如何触发这种变化 我可以在我的用例函数中重定向用户,但我不能使用history.pushpathName/state参数,因为它只在React组件中工作 这就是我在React组件中所做的: const acceptProposalHandler = () => { store.dispatch(acceptProposal(id)).then((

我已经创建了一个redux,它将请求一个API,如果结果是200,我想使用
历史
将用户重定向到另一个页面

问题是:如果行动成功,我不知道如何触发这种变化

我可以在我的用例函数中重定向用户,但我不能使用
history.push
pathName/state参数,因为它只在React组件中工作

这就是我在React组件中所做的:

  const acceptProposalHandler = () => {
    store.dispatch(acceptProposal(id)).then(() => {
      setTimeout(() => {
        if (isAccepted) { //isAccepted is false by default but is changed to true if the 
                          //request is 200
            history.push({
            pathname: urls.proposal,
            state: {
            starterTab: formatMessage({id: 'proposalList.tabs.negotiation'}),
             },
           });
        }
      }, 3000);
    });
  };
有时有效,但有时无效。出于某种原因,
。然后,即使请求失败,也会调用

我使用的是
setTimeOut
,因为如果我不这样做,它将跳过if语句,因为redux尚未使用
isAccepted
更新状态

这是我从redux获得的用例函数:

export const acceptProposal = (id: string) => async (
  dispatch: Dispatch<any>,
  getState: () => RootState,
) => {
  const {auth} = getState();
  const data = {
    proposalId: id,
  };
  dispatch(actions.acceptProposal());
  try {
    await API.put(`/propostas/change-proposal-status/`, data, {
      headers: {
        version: 'v1',
        'Content-Type': 'application/json',
      },
    });
    dispatch(actions.acceptProposalSuccess());
  } catch (error) {
    dispatch(actions.acceptProposalFailed(error));
  }
};
export const acceptProposal=(id:string)=>async(
调度:调度,
getState:()=>RootState,
) => {
const{auth}=getState();
常数数据={
提议人:id,
};
分派(actions.acceptProposal());
试一试{
等待API.put(`/propostas/change proposal status/`,数据、{
标题:{
版本:“v1”,
“内容类型”:“应用程序/json”,
},
});
分派(actions.acceptProposalSuccess());
}捕获(错误){
分派(操作.接受提议文件(错误));
}
};
我做错了什么?我正在将Redux与thunk一起使用,但我不熟悉它。

”。即使请求失败,也会调用它( //…其他隐藏的代码 }捕获(错误){ 分派(操作.接受提议文件(错误)); //添加:重新抛出错误,以便调用方可以使用“.catch”或“try/catch”` 投掷误差; } };
非常感谢:)