【问题标题】:How does combineReducers being provided with the right state slices如何为 combineReducers 提供正确的状态切片
【发布时间】:2017-08-20 16:47:01
【问题描述】:

我对@9​​87654324@很陌生。

我一直在阅读它的“Reducers documentation”,遇到了我似乎无法理解的combineReducers 函数。

他们注意到:

combineReducers() 所做的只是生成一个函数,该函数调用您的减速器根据它们的键选择状态切片,然后再次将它们的结果组合成一个对象. It's not magic.

我确实理解它返回一个组合减速器,就像听起来一样,但是它如何为每个减速器提供特定的相关状态片 - 根据它们的键什么意思?

深入研究他们的It's not magic git 问题帮助我更多地了解combineReducers 的使用,但我仍然无法理解 根据他们的键 解析。

任何解释将不胜感激,谢谢。

【问题讨论】:

    标签: redux state reducers


    【解决方案1】:

    A:如果您的状态切片和减速器函数具有相似的名称 - 该减速器将与该切片一起提供。

    示例:

    const state = {
      slice1 : {...},
      slice2 : {...}
    }
    
    function slice1(state, action){...}
    function slice2(state, action){...}
    
    combineReducers({slice1, slice2})   //Reducers will be provided with appropriate slices.
    

    B:如果您为combineReducers 函数提供键,则这些键必须与状态切片键匹配。

    示例:

    const state = {
      slice1 : {...},
      slice2 : {...}
    }
    
    function reducer1(state, action){...}
    function reducer2(state, action){...}
    
    combineReducers({slice1 : reducer1, 
                     slice2 : reducer2})   //Reducers will be provided with appropriate slices.
    

    C:两种方法可以混合使用:

    示例:

    const state = {
      slice1 : {...},
      slice2 : {...}
    }
    
    function slice1(state, action){...}
    function reducer2(state, action){...}
    
    combineReducers({slice1, 
                     slice2 : reducer2})   //Reducers will be provided with appropriate slices.
    

    【讨论】:

    • 感谢您的详细解答!
    【解决方案2】:

    我认为如果你不是很熟悉新的 ES6 语法,可能会引起一些混乱。

    如果您查看 redux 文档,您会发现他们使用 ES6 object literal shorthand syntax 来定义对象形状

    const rootReducer = combineReducers({
        theDefaultReducer,
        firstNamedReducer,
        secondNamedReducer
    });
    

    这个简写其实可以翻译成:

    var rootReducer = combineReducers({
        theDefaultReducer: theDefaultReducer,
        firstNamedReducer: firstNamedReducer,
        secondNamedReducer: secondNamedReducer
    });
    

    正如您看到的键匹配单独的单个 reducer,这样 combineReducers 知道要映射什么。

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2022-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多