返回

如何在 reducer 之间共享 state?

发布时间:2023-10-29 18:14:15 144


如何在 reducer 之间共享 state?_javascript


如何在 reducer 之间共享 state?

combineReducers(reducers)

reducers (Object): 一个对象,它的值(value)对应不同的 reducer 函数,这些 reducer 函数后面会被合并成一个。

随着应用变得越来越复杂,可以考虑将 reducer 函数拆分成多个单独的函数,拆分后的每个函数负责独立管理 state 的一部分。

rootReducer = combineReducers({potato: potatoReducer, tomato: tomatoReducer})
// rootReducer 将返回如下的 state 对象
{
potato: {
// 由 potatoReducer 管理的 state 对象 ...
},
tomato: {
// 由 tomatoReducer 管理的 state 对象 ...
}
}

那么问题来了,将 reducer 函数拆分成多个单独的函数,reducer 之间无法共享 state 怎么办呢?(由 potatoReducer 管理的 state 对象与由 tomatoReducer 管理的 state 对象,无法获取对方的 state 值)。首先最简单的办法是不要将 reducer 函数拆分成多个单独的函数,而是只使用一个 reducer 函数,就不会出现这个问题了。

标准的做法是使用 Redux Thunk 中间件。要引入 redux-thunk 这个专门的库才能使用。在 redux-thunk 的 异步 action 创建函数能通过 getState() 方法获取所有的 state。

export function fetchPostsIfNeeded(subreddit) {
// 注意这个函数也接收了 getState() 方法
// 它让你选择接下来 dispatch 什么。

return (dispatch, getState) => {
// todo...
}
}

只需牢记 reducer 仅仅是函数,可以随心所欲的进行划分和组合,而且也推荐将其分解成更小、可复用的函数。


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线