赞
踩
在我的情况下,我有一个像以下商店:
{ aa: {...}, bb: cc // the result of computing with aa }
我需要更新aa
,并bb
在同一时间,但bb
需要得到的最新计算aa
.
这是一些代码(React.js):
onClick(e) { const { dispatch, aa, bb } = this.props; dispatch(updateAa()); dispatch(updateBb(aa)); // can not get the latest computation of aa, it is the last computation.. }
那么,这是否意味着我需要aa
在bb
的减速?
我怎么能这样做?
希望有所帮助!谢谢!
不要用 combineReducers.
例
替换此代码
export const a = combineReducers({ app, posts, intl, products, pos, cats, });
同
export default (state = {}, action) => { return { app: app(state.app, action, state), posts: posts(state.posts, action, state), intl: intl(state.intl, action, state), products: products(state.products, action, state), pos: pos(state.pos, action, state), cats: cats(state.cats, action, state), }; };
减速机就像
const reducer = (state = initialState, action, root) => {....}
有几种可能性,但考虑到代码的模糊性,很难说哪种方法最好.
理想情况下,您的商店应该标准化,这意味着每个数据只能在一个地方使用.然后,您将在读取商店后计算派生数据,例如,当您使用指南中描述的选择器模式将商店的状态映射到您可能认为将发送到组件的物化视图时props
.在这个工作流程,aa
并且bb
将每一个可以通过选择功能产生,而不是存储在该存储区本身.
你可以离开了减速机的更新aa
和bb
之外combineReducers
,因此,它认为整个国家,而不是国家范围的向下aa
和bb
.
您可以将计算代码分解为可由updateAa
and 调用的帮助程序updateBb
,并在每个操作中传递足够的信息以进行计算.
您可以在分派之前计算更新,以便该操作包含正确的值.
正如David L. Walsh所说,可能你应该以更合理的方式构建减速器.
但如果你仍然认为你需要它,你可以使用thunk中间件.(https://github.com/gaearon/redux-thunk)Redux Thunk中间件允许您编写返回函数而不是动作的动作创建者.
Redux Thunk为您提供了一种读取Redux商店当前状态的方法.除了dispatch之外,它还将getState作为第二个参数传递给您从thunk action creator返回的函数.
export function action() { return function(dispatch, getState){ const state = getState() dispatch({ type: "ACTION_WITH_SOME_PART_OF_STATE, some_part_of_state: state.some_part }) } }
问问自己您是否正确构造了减速器。如果a和b彼此不独立,为什么它们将减速器分开?我会尝试将它们合并为一个简化器。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。