【发布时间】:2020-03-27 18:35:52
【问题描述】:
我在学习 Redux 时遇到了一些关于 reducer 如何更新状态的困惑。例如这里是代码:
const initialState = {
counter: 0
};
const counterReducer = (state = initialState, action) => {
if(action.type==="INCREASE"){
return {
counter: state.counter+1;
}
}
return state;
};
问题是当这段代码 counter: state.counter+1; 运行时,它会在此处将计数器从 0 更改为 1
const initialState = {
counter: 0
};
让我困惑的是,如果它不变地改变,那么如果运行这段代码,是什么使得之前的状态被记住:
if(action.type==="INCREASE"){
return {
counter: state.counter+1;
}
不止一次。希望你明白我的意思,如果不是请告诉我
【问题讨论】:
-
简短回答,不,它不会改变初始状态下
initialState和属性counter的值。这是因为如果传递了正确的action.type,该函数将返回对return {...}语句创建的新object的引用。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
希望这能回答你的问题stackoverflow.com/questions/34958775/…
-
@wlh,想象一下在第一个按钮上单击“INCREASE”动作被调度并且在这里 state.counter+1;状态取自初始状态。那是对的吗?但是当您第二次单击该按钮时。 1的当前状态在哪里?
-
你的 reducer 需要传入 state。所以你必须确保每次都将 state 传递给 reducer。此外,之后您需要有一个存储状态的地方。这就是某种带有
store的Provider发挥作用的地方。