2016-11-29 185 views
2

我是新来的反应/ redux。我想弄清楚redux中的所有部分如何相互作用。让我陷入麻烦的一件事就是理解动作和减速器之间的关系。当一个动作被调用时,商店如何知道使用哪个减速器?它是否完全基于动作类型名称?类型名称必须是唯一的吗?减速器向谁传递新的状态对象,或者存储器或动作?Redux - 减速机与动作的关系

据我了解,它是这样的:

  1. store.dispatch(动作)被称为
  2. 店发现基于动作类型
  3. 减速克隆当前状态对象相关的减速机,进行更改,将其传回(某处)

回答

4

1:商店如何知道使用哪个减速器 - >这完全基于动作类型。

2:类型名称必须是唯一的吗? - >这不是一个规则。但主要是,是的。每个操作都有一个独特的类型名称,并调用相应的reducer。

3:Reducer将哪个或哪些新状态对象传递给Store或Action? - > Reducer不会在任何地方传递新的状态对象。基本上,它会触发一个状态改变事件给所有正在监听它的反应组件。监听改变状态的所有组件都会重新呈现,并带有新版本的状态,从而更新您的DOM。

+0

谢谢。我现在开始把事情整理在一起。 – steveareeno

1

通常,只有一个reducer负责完成状态。

该减速机可以拆分成不同的较小减速机功能,每个功能负责不同的状态切片。例如Redux's combineReducers() utility可以做到这一点,但你也可以手动做到这一点。

如果使用combineReducers(),每个减速器函数都针对每个调度操作执行。然后,他们纯粹根据行为类型来决定行动是否会影响其状态的切片。如果是,则返回该切片的更新副本。如果它的切片不受该动作的影响,则它将保持不变。

1

在一个典型的Redux设置中,这些操作被分派给所有reducer,并由减压器决定他们是否关心该操作。一个常见的模式是在检查action.type减速开关,有案件它在乎的行动和刚刚返回的当前状态像这样的默认情况下:

export default (state = false, action) => { 
    switch (action.type) { 
    case START_LOADING: 
     return true; 
    case STOP_LOADING: 
     return false; 
    default: 
     return state; 
    } 
} 

在这种情况下,我告诉我的减速器只关心类型为START_LOADINGSTOP_LOADING的动作,而在所有其他情况下,它应该只返回它以前的状态。

为了深入了解Redux(和Flux),我建议您查看Lin Clark或她的videoCode Cartoons,它涵盖了大部分相同的事情。