【发布时间】:2020-04-27 19:07:10
【问题描述】:
我有以下currentState。当我添加收件人时,新收件人应附加到收件人.allIds 和收件人产品,默认数量 = 1。我坚持附加到 recipientProduct 部分。这应该在 immutable way 中完成,因为它是一个 redux 状态。
let currentState = {
product: {
allIds: ['1', '5'],
},
recipient: {
allIds: ['1'],
},
recipientProduct: [{
recipientId: '1',
productId: '1',
qty: '3'
}, {
recipientId: '1',
productId: '5',
qty: '3'
}],
};
当我添加一个新的收件人时:
addRecipient = (recipientId) => {
// when recipientId = 2
// note quantity is always default to 1
-> append productIds to product.allIds if not exists
-> loop through all product from product.allIds
loop through all recipient from recipient.allIds
if (recipientId === recipientId && productId === productId) {
remain
} else {
// append with default qty 1
}
}
这将是newState:
newstate = {
product: {
allIds: ['1', '5'],
},
recipient: {
allIds: ['1', '2'],
},
recipientProduct: [{
recipientId: '1',
productId: '1',
qty: '3'
}, {
recipientId: '1',
productId: '5',
qty: '3'
},{
recipientId: '2',
productId: '1',
qty: '1'
}, {
recipientId: '2',
productId: '5',
qty: '1'
}],
}
【问题讨论】:
-
你能解释一下为什么这个项目
{recipientId: 1 productId: '5', qty: '3'}添加到recipientProduct吗? -
@YevgenGorbunkov 有 2 个对象添加到
recipientProduct,因为 product.allIds ['1', '5'] 中有 2 个 productId。所以我需要取回所有的productIds,从而产生{recipientId: '2', productId: '1', qty: '1' }, { recipientId: '2', productId: '5', qty: '1' },它是productId 1的1和5的另一个 -
@YevgenGorbunkov 你明白了吗?它是基于多接收者到多产品关系的规范化
-
@YevgenGorbunkov 你可以参考我在问题中提供的
When I append a new recipient逻辑会话。 -
@YevgenGorbunkov 是的,你是对的。这是我的初始状态的一个错误。我已更新以提供正确的
initialState
标签: javascript reactjs ecmascript-6 redux immutability