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