javascript - React-Redux 增量/减量问题
问题描述
我正在做一些 React-Redux 练习,我注意到一个我无法理解的行为:它是否有效取决于我是否使用 + 1 / - 1 或 ++ / -- 运算符。
这是我的减速机:
const counterReducer = (state = { counter: 0 }, action) => {
switch (action.type) {
case "INCREMENT":
return {
counter: state.counter + 1,
};
case "DECREMENT":
return {
counter: state.counter - 1,
};
default:
return state;
}
};
它工作正常。
但是如果我将增量和减量更改为:
const counterReducer = (state = { counter: 0 }, action) => {
switch (action.type) {
case "INCREMENT":
return {
counter: state.counter++,
};
case "DECREMENT":
return {
counter: state.counter--,
};
default:
return state;
}
};
它仍然会在不更新 Redux 状态的情况下触发操作。
解决方案
因为在第二个减速器中您使用的是prefix
运算符:
const counterReducer = (state = { counter: 0 }, action) => {
switch (action.type) {
case "INCREMENT":
return {
counter: state.counter++, //<--- prefix operator
};
case "DECREMENT":
return {
counter: state.counter--, //<--- prefix operator
};
default:
return state;
}
};
如果您使用 ++ 运算符作为前缀,例如:++var,则 var 的值增加 1;然后它返回值。
如果使用 ++ 运算符作为后缀,例如:var++,则首先返回 var 的原始值;然后 var 增加 1。
所以需要使用postfix
operator incounterReducer
而不是prefix
operator:
const counterReducer = (state = { counter: 0 }, action) => {
switch (action.type) {
case "INCREMENT":
return {
counter: ++state.counter, //<--- postfix operator
};
case "DECREMENT":
return {
counter: --state.counter, //<--- postfix operator
};
default:
return state;
}
};
推荐阅读
- angular - 获取模板中的 Angular formArrayName 索引值
- api - 如何在 Swagger 中创建内部和外部文档?
- c++ - 使用 500MB RAM 的 10MB 图像
- java - Nifi处理中缺少流文件异常导致信息丢失
- javascript - JS 自动滚动代码仅用作 HTML 的一部分,但不能用作 JSFiddle 中的单独脚本
- javascript - 格式化日期数组
- visual-studio-code - 使用带有 remote-ssh 扩展的 Visual Studio Code 时设置环境变量
- android - Profiler 中的内存使用量远低于实际设备
- javascript - 单击带有 reactjs 和 Material UI 的按钮时更改内容
- facebook-graph-api - 在 Instagram 上的当前帐户上按标签搜索内容