javascript - 转换对象以使用扩展运算符?
问题描述
我在redux reducers中有一个案例,我使用object.assign来复制我的状态,我想将它转换为新的语法传播运算符“......状态”,我该怎么做,
不做突变!
case INCREASE_QUANTITY: {
return Object.assign({}, state, {
cart: state.cart.map(item => {
if (item.product.id === action.productInfo.product.id) {
return Object.assign({}, item, {
quantity: action.quantity + 1,
});
}
return item;
}),
});
}
解决方案
您打开一个对象文字,首先...state
将其展开到新对象中,然后使用cart
属性(以及内部属性的相同概念):
case INCREASE_QUANTITY: {
return {
...state,
cart: state.cart.map(item => {
if (item.product.id === action.productInfo.product.id) {
return {
...item,
quantity: action.quantity + 1,
};
}
return item;
}),
};
}
通过按该顺序执行此操作,您可以确保cart
(或quantity
内部的)覆盖传播中的属性。对象文字中后来的属性“胜过”早期的属性。
推荐阅读
- node.js - 如何用猫鼬更新另一个对象数组中的对象数组?
- python - AWS Elastic Beanstalk 容器命令失败
- android - 尝试在 editText Kotlin 上输入字符串时 setText 返回错误
- tkinter - tkcalender 对象未在 cx_freeze 创建的 exe 中显示
- java - 如何在xml中选择具有空元素的节点
- python - 对 Python 的 skimage 的 img_as_float 函数输出感到困惑
- c++ - 如何将 Eigen 库安装到 IAR c/c++ 编译器
- ios - 如何在 swift 中通过 segue 实现登录过程?
- postgresql - 在 Postgresql 中创建和访问以数值开头的模式
- r - 将具有一个 id 和一个变量列的 data.table 转换为存在矩阵