我正在使用 Redux 和 ImmutableJS 来管理我的应用程序的状态。我创建了以下两条记录:
export const OrderRecord = Record({
id: null,
productId: null,
amount: 1,
});
export const ProductRecord = Record({
id: null,
name: '',
price: 0,
});
我的全局状态基于 normalizr 方法进行标准化,如下所示:
const state = {
entities: {
orders: new OrderedMap(new Map({
1: new OrderRecord(createOrderItem(1, 1)),
})),
products: new OrderedMap(new Map({
1: new ProductRecord(createProductItem(1)),
})),
},
};
- 我将此规范用于测试目的。
现在我正在尝试使用 Reselect 对计算字段进行一些选择。
export const getVisibleOrders = createSelector(
[getProducts, getOrders],
(products, orders) => {
orders.map(order => {
const product = products.get(order.productId.toString());
if (!product) {
return order;
}
const totalPrice = order.amount * product.price;
order.set('productName', product.name);
order.set('totalPrice', totalPrice);
return order;
});
}
);
,但我收到以下错误消息:
错误:无法在记录中设置未知键“productName”
我知道原因 - 记录不能包含任何未定义的键,但我的问题是:是否有任何建议的方法如何优雅地解决这个问题?
- 我不想扩展我的记录来支持这种计算参数(product.name 和 totalPrice)。
- 我不想将静态参数和计算参数保存在一个地方,因为例如“productName”参数来自“Product”实体而不是“Order”实体。
谢谢你。