【发布时间】:2020-06-14 14:19:19
【问题描述】:
我正在尝试从数组中过滤一个对象(redux reducer),
const data = [
{id: 0, name: 'Printed Men black Shirt', itemCode: 1000, price: 530, currency: '$', manufacturer: 'ColorWorld'},
{id: 1, name: 'Denim blue white shorts', itemCode: 1001, price: 230, currency: '$', manufacturer: 'ColorWorld'},
{id: 2, name: 'Solid Men blue pants', itemCode: 1003, price: 1530, currency: '$', manufacturer: 'Mecrono Hipli'},
{id: 3, name: 'Checkerd Men Blue Shorts', itemCode: 1300, price: 2530, currency: '$', manufacturer: 'Mecrono Hipli Mini'},
{id: 4, name: 'Self Designed Pant', itemCode: 1056, price: 130, currency: '$', manufacturer:
];
export const listProducts = (state = data, action) => {
switch(action.type){
case LIST_ALL_PRODUCTS: {
return state;
}
case SEARCH_PRODUCT: {
return state.filter((e)=> e.name.includes(action.payload))
}
default:
return state
}
}
这个 reducer 总是更新实际状态。为什么这不创建一个新的过滤数组?
【问题讨论】:
-
这段代码没有问题。请显示动作创建者,你在哪里调用它,以及你在组件中使用状态的位置,这会让你相信它不会更新。
-
@cbr 如何使用扩展运算符进行复制?
-
您能澄清一下您的问题吗?
.filter创建一个新数组,它不会改变旧数组。 “总是更新实际状态”和“不制作新的过滤数组”是什么意思? -
@cbr 一旦 SEARCH_PRODUCT 案例工作,在调用 LIST_ALL_PRODUCTS 案例时,它会返回一个空数组。
标签: javascript arrays reactjs redux