当前位置:   GIT > 正文

Redux - 有没有办法在reducer中访问存储树?

redux,https,git,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

在我的情况下,我有一个像以下商店:

{
  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..
}

那么,这是否意味着我需要aabb的减速?

我怎么能这样做?

希望有所帮助!谢谢!



1> Sheikh Abdul..:

不要用 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) => {....}



2> acjay..:

有几种可能性,但考虑到代码的模糊性,很难说哪种方法最好.

理想情况下,您的商店应该标准化,这意味着每个数据只能在一个地方使用.然后,您将读取商店计算派生数据,例如,当您使用指南中描述的选择器模式将商店的状态映射到您可能认为将发送到组件的物化视图时props.在这个工作流程,aa并且bb将每一个可以通过选择功能产生,而不是存储在该存储区本身.

你可以离开了减速机的更新aabb之外combineReducers,因此,它认为整个国家,而不是国家范围的向下aabb.

您可以将计算代码分解为可由updateAaand 调用的帮助程序updateBb,并在每个操作中传递足够的信息以进行计算.

您可以在分派之前计算更新,以便该操作包含正确的值.



3> Guido Diziol..:

正如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
        })   
    }
}



4> David L. Wal..:

问问自己您是否正确构造了减速器。如果a和b彼此不独立,为什么它们将减速器分开?我会尝试将它们合并为一个简化器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/GIT/detail/12999
推荐阅读
相关标签
  

闽ICP备14008679号