如何在触发或完成操作时执行函数?

时间:2018-01-05 10:50:23

标签: reactjs redux react-redux

简短问题

触发操作后执行功能的最佳做法是什么?

我很想检测中间件中的动作。如果它是我想要的动作,执行该函数,然后将动作传递给reducers。但这看起来有点哈哈?

FYI该函数使用jQuery获取页面上的所有codemirror元素并清除所有这些元素的历史记录

背景的全部问题(对于那些想要更深入的人)

我正在使用的代码(不是我的代码)触发一个动作(FAKE_ACTION)

FAKE_ACTION的有效负载是另一个动作(REAL_ACTION)。

FAKE_ACTION将REAL_ACTION存储在全局redux状态的列表中。

稍后,REAL_ACTION将从列表中拉出并触发。

触发REAL_ACTION后,我想执行一个函数。这个功能应该在哪里生活?

4 个答案:

答案 0 :(得分:1)

您可以定义一个功能。在您的操作中,在发送响应时发布Ajax调用,您将调用成功回调或错误回调。因此,在调度中,您可以定义您的功能。

export function loginUser(email, password) {
  return (dispatch, getState) => {
    dispatch(loginRequest())
    return ajax.post(URL_PREFIX+"/auth/login", { email, password })
      .then(res => {          
              // console.log("path: ", path)
          dispatch(loginSuccess(res))
         const value = loginUtils.getCurrentUser()  //function that you are talking about    
      })
      .catch(errors => {
        dispatch(loginFail(errors));
      })
  }
}

在loginUtils中,函数getCurrentUser()如下所示

export function getCurrentUser() {
return 'test'
}

答案 1 :(得分:1)

你必须为此执行异步操作。 您可以使用redux-thunk之类的中间件,也可以使用javascript promise或任何其他回调异步功能。

答案 2 :(得分:1)

看起来您想知道如何在redux上下文中处理异步操作(副作用)。这确实是通过中间件发生的,但您不必编写自己的中间件。有redux-thunk或更好redux-saga等项目。它基本上是位于dispatch和减速器之间的逻辑。

答案 3 :(得分:0)

这里有一些有用的答案,但没有一个是我所追求的(考虑到我正在使用的凌乱的代码库)/感觉不对。

我最终使用store.subscribe,它允许您订阅商店数据中的更改并做出相应的反应。

有关详细信息,请参阅https://redux.js.org/docs/api/Store.html#subscribe