从reducer内部触发第三方端点的通知:yay还是nay?

时间:2018-06-16 20:46:29

标签: reactjs redux react-redux redux-thunk

我正在将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,我该如何调用此事件?

1 个答案:

答案 0 :(得分:1)

你永远不会在reducer中调用异步函数。你希望在行动中调用它。 Reducer仅用于更新商店。

在react组件的make处理程序中检查商店(例如在componentDidUpdate方法中),当你获得某个商店时,只需点击dispatch函数,该函数将接收具有你想要的值的动作参数传递POST请求。然后你需要创建将进行异步调用的动作。您可以使用redux-thunk执行此操作。如果您不熟悉这种方法,请告诉我。我会尝试在https://codesandbox.io/为你制作样品。