我正在将React-Redux与redux thunks一起用于与远程SDK交互并与该SDK同步状态的Web应用程序。
除了这个远程SDK,我还有一个我想发送生命周期更新的第三方端点。当加载特定页面或者我的react应用程序中的检查点到达时,我想通知端点发生了这些事件。我不关心此端点的响应,并且我不会根据此响应执行任何存储更新。当第三方端点被通知此事件时,它会执行一些自己的逻辑。你可以认为它是一个“记录”功能。
具体来说,我感兴趣的是当Redux存储更新到某个状态时触发此POST请求。
我有这种方法将请求发布到端点:
export const lifecycleEndpointNotify = (event: string) => {
console.log(event)
const call = lifecycleEndpoint(event)
console.log(call)
return fetch(call, {
method :'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
code: 200,
message: 'Lifecycle event occured.',
})
})
.then(
response => console.log(response),
error => console.log('An error occured.', error)
)
}
调用此函数的适当位置是什么?由于我想在调用特定的反应操作并更新存储后触发此事件,因此减速器对我来说是最有意义的。但是,由于它在技术上引发副作用,我不确定是否将它放入reducer中会违反redux规范。 其他选项是我在触发dispatch()调用以更新商店之前在我的thunk动作函数中调用此事件。但是,这不会将事件直接链接到操作本身。如果调度特定操作,或者存储中发生特定更改,如某些变量从true切换为false,我该如何调用此事件?
答案 0 :(得分:1)
你永远不会在reducer中调用异步函数。你希望在行动中调用它。 Reducer仅用于更新商店。
在react组件的make处理程序中检查商店(例如在componentDidUpdate
方法中),当你获得某个商店时,只需点击dispatch
函数,该函数将接收具有你想要的值的动作参数传递POST请求。然后你需要创建将进行异步调用的动作。您可以使用redux-thunk
执行此操作。如果您不熟悉这种方法,请告诉我。我会尝试在https://codesandbox.io/为你制作样品。