如何在 reducer 之间共享 state?
前端精髓
共 1164字,需浏览 3分钟
·
2021-03-29 12:43
许多用户想在 reducer 之间共享数据,但是 combineReducers 不允许此种行为。有许多可用的办法,今天就一起讨论这个问题。
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 仅仅是函数,可以随心所欲的进行划分和组合,而且也推荐将其分解成更小、可复用的函数。
总结:如果一个 reducer 想获取其它 state 层的数据,往往意味着 state 树需要重构,需要让单独的 reducer 处理更多的数据。
评论
如何在路边问调查问卷?
不知道,我第一个调查者刚拒绝了我的调查(叹气)
说服别人进行问卷有三步
第一步:选址
你的调查问卷或多或少需要别人花一点时间去填写,所以你需要找那些休闲的人多的地方。公园和大学校园ʕ •ᴥ•ʔ。一般来讲,商业街这种人多的地方也是可以的。
第二步:瞄人
这就是所谓的考验你眼力的时候。挑选看上去和蔼的孤独的爷爷奶奶,休闲散步的年轻情侣,结伴游玩的靓丽的小姐姐(小于三人),独自一人的中年阿姨,或者叔叔。这类人群比较容易被你拦截,并且不那么容易有攻击性。注意,如果你选择对个体营业户进行调查问卷(刷一条街的店),不要打扰到别人,这类人群拒绝你的概率也比较高。
第三步:语言
首先打招呼。小朋友,小哥哥小姐姐和爷爷奶奶,不好称呼的,
裘咪
0