【发布时间】:2018-08-25 07:21:42
【问题描述】:
我是 Redux 的新手,我在理解 reducer 的概念时发现了一些问题, 我可以看到很多例子表明它采用当前状态并返回更新状态, 我的问题是它如何通过返回新状态来更新商店(我发现很难理解这种机制), 谁能给我解释一下。
【问题讨论】:
我是 Redux 的新手,我在理解 reducer 的概念时发现了一些问题, 我可以看到很多例子表明它采用当前状态并返回更新状态, 我的问题是它如何通过返回新状态来更新商店(我发现很难理解这种机制), 谁能给我解释一下。
【问题讨论】:
Redux 存储 只不过是一个保存应用程序所有状态的对象。 reducer 是更新 store 的唯一方法。
reducer 是一个纯函数,它接受一个旧状态并返回一个新状态。在 reducer 中,我们需要做的是只提供存储当前拥有的旧状态,然后提供我们要更改状态的新状态。关于reduce函数的详细解释可以参考this。
简单来说,reducer 通过reducer 函数通过现有的状态对象更新一些属性并返回新的对象状态。
以下链接有更好的解释。这是一个非常好的博客如何创建你自己的 redux。您将确切了解 redux 商店中发生的情况。
【讨论】:
这是我在学习相同概念时发现非常有用的图像。
当您调度任何函数时,它会发送到所有减速器,如果调度类型匹配,它将更改该减速器的状态。
functionName:()=>(dispatch)({type:'some-thing-to-match',payload})
const store = combineReducers({
Reducer1:r1,
Reducer2:r2,
Reducer3:r3
})
var mapStateToProps = state=>{
return:{
r1:r1
}
}
然后 react 将对状态的任何变化做出反应。如果 r1 的状态发生变化,那么它将更新该组件。
正如我们在图片中看到的那样。 Dispatch 将改变商店的状态。然后 您可以导入(连接)该减速器以查看您的更改 组件。(这里 TodoItem 是那个组件)
【讨论】:
其实这是我对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
}
}
【讨论】: