【问题标题】:How reducers update the storereducer 如何更新 store
【发布时间】:2018-08-25 07:21:42
【问题描述】:

我是 Redux 的新手,我在理解 reducer 的概念时发现了一些问题, 我可以看到很多例子表明它采用当前状态并返回更新状态, 我的问题是它如何通过返回新状态来更新商店(我发现很难理解这种机制), 谁能给我解释一下。

【问题讨论】:

标签: reactjs redux reducers


【解决方案1】:

Redux 存储 只不过是一个保存应用程序所有状态的对象。 reducer 是更新 store 的唯一方法。

reducer 是一个纯函数,它接受一个旧状态并返回一个新状态。在 reducer 中,我们需要做的是只提供存储当前拥有的旧状态,然后提供我们要更改状态的新状态。关于reduce函数的详细解释可以参考this。

简单来说,reducer 通过reducer 函数通过现有的状态对象更新一些属性并返回新的对象状态。

以下链接有更好的解释。这是一个非常好的博客如何创建你自己的 redux。您将确切了解 redux 商店中发生的情况。

https://www.jamasoftware.com/blog/lets-write-redux/

【讨论】:

【解决方案2】:

这是我在学习相同概念时发现非常有用的图像。


派送

当您调度任何函数时,它会发送到所有减速器,如果调度类型匹配,它将更改该减速器的状态。

 functionName:()=>(dispatch)({type:'some-thing-to-match',payload})



减速器 处理状态变化。


商店 所有减速器的组合(根减速器)。
const store = combineReducers({
Reducer1:r1,
Reducer2:r2,
Reducer3:r3
})


例如,在 TodoList 中匹配 r1 并更改其状态的调度函数。然后通过从“react-redux”连接,我们将该减速器状态连接到 TodoList。
var mapStateToProps = state=>{
 return:{
 r1:r1
}
}

然后 react 将对状态的任何变化做出反应。如果 r1 的状态发生变化,那么它将更新该组件。


您的问题是如何通过返回状态来更新商店。您的减速器将获取存储(状态)和函数作为输入,并根据函数更改存储并将状态返回到存储。
然后我们可以将我们的组件连接到该商店以捕捉其中的任何变化。

正如我们在图片中看到的那样。 Dispatch 将改变商店的状态。然后 您可以导入(连接)该减速器以查看您的更改 组件。(这里 TodoItem 是那个组件)

【讨论】:

  • 很高兴听到这个消息:-)
【解决方案3】:

其实这是我对reducers 遗漏的部分,我没有抓住的部分是reducers 输出的必须分配给store 属性

let Action={type:'SET_VISIBILITY_FILTER',text: 'test pay load'}

//Invoking Reducer
let store=todoApp({},Action)

//Reducer
function todoApp(state = initialState, action) {
  switch (action.type) {
    case SET_VISIBILITY_FILTER:
      return Object.assign({}, state, {
        message: action.text
      })
    default:
      return state
  }
}

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2018-03-12
    • 2020-03-10
    • 2019-09-05
    相关资源
    最近更新 更多