账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    combineReducers拆分后不同的Reducers状态不共享吗?
    30
    0

    当我写了ReducerA和ReducerB后,使用combineReducers

    const rootReducer = combineReducers({
        ReducerA,
        ReducerB
    });
    
    export default rootReducer;

    状态就变成了

    state:{
        ReducerA:...,
        ReducerB:...
    }

    相对应的ActionA和ActionB也就只能通过对应的Reducer更改对应的state部分

    ActionA → state:{ReducerA:...}
    
    ActionB → state:{ReducerB:...}

    应该是这样的吗?有办法通过ActionB去影响state:{ReducerA:...}的内容吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 可人的小仙女 VIP会员 1楼

      在Redux中,Reducer的状态并不是直接共享的,但是它们之间通过创建多个子Reducer并合并这些子Reducer的状态来实现共享。在Redux中,子Reducer通常负责处理特定类型的输入,处理特定的任务,或者处理特定的状态,而不是整个应用程序的状态。当一个Reducer从其父Reducer接收输入,处理输入并返回一个状态时,它并不会直接共享该状态。相反,它会将该状态存储在子Reducer的store.statestore.getters中,并通过combineReducers函数将其与父Reducer的其他状态合并,生成一个新的Redux状态。

      合并后的状态可能会包含子Reducer处理后的状态,但是每个子Reducer的stategetters都是独立的,不会共享同一个状态。这可以通过在子Reducer内部声明状态共享对象或者通过共享状态对象的方法来实现。以下是一个简单的例子,展示如何在Redux中合并子Reducer的状态:

      ```jsx import { combineReducers } from 'redux'; import MyReducer1 from './MyReducer1'; import MyReducer2 from './MyReducer2';

      const rootReducer = combineReducers({ myReducer1: MyReducer1, myReducer2: MyReducer2, });

      export default rootReducer; ```

      在这个例子中,rootReducer包含两个子Reducer:myReducer1myReducer2。在合并过程中,myReducer1stategetters被合并到rootReducermyReducer1子Reducer中,形成一个新的状态myReducer1.state。然后,myReducer2stategetters被合并到rootReducermyReducer2子Reducer中,形成一个新的状态myReducer2.state

      然而,需要注意的是,即使合并了子Reducer的状态,当应用在不同的组件或服务器之间进行渲染或传递时,这些子Reducer的状态仍然不会共享。例如,如果myReducer1state被传递到myReducer2中,那么在myReducer2中,state将只包含它自身的状态,而不会包含myReducer1的状态。然而,由于state是一个对象,它可以通过在子Reducer内部创建一个共享状态对象或者通过共享状态对象的方法来实现状态共享,如getters中的state属性。在这种情况下,myReducer1myReducer2state在不同的组件或服务器之间是独立的,但是可以通过共享状态对象来实现状态共享。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部