触发操作后执行功能的最佳做法是什么?
我很想检测中间件中的动作。如果它是我想要的动作,执行该函数,然后将动作传递给reducers。但这看起来有点哈哈?
FYI该函数使用jQuery获取页面上的所有codemirror元素并清除所有这些元素的历史记录
我正在使用的代码(不是我的代码)触发一个动作(FAKE_ACTION)
FAKE_ACTION的有效负载是另一个动作(REAL_ACTION)。
FAKE_ACTION将REAL_ACTION存储在全局redux状态的列表中。
稍后,REAL_ACTION将从列表中拉出并触发。
触发REAL_ACTION后,我想执行一个函数。这个功能应该在哪里生活?
答案 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