【发布时间】:2017-01-09 08:56:01
【问题描述】:
我正在使用 redux persist 自动持久化应用程序启动时的状态,如文档中所述,特别是使用 AsyncStorage:https://github.com/rt2zz/redux-persist。
我在下面定义了一个减速器,它将当前产品添加到 state.products 中的购物车中
case 'ADD_PRODUCT':
let addedProducts = [...state.products]
addedProducts.push(action.product);
return {
...state,
count: ++state.count,
products: addedProducts
};
case 'REMOVE_PRODUCT':
let count = state.count;
let removedProducts = [...state.products];
let idxOfProduct = state.products.indexOf(action.product);
if(idxOfProduct != -1){
count = --state.count;
removedProducts.splice(idxOfProduct,1);
}
return{
...state,
count: count,
products: removedProducts
};
#1。如果我发送“ADD_PRODUCT”,它会添加产品,然后如果我发送“REMOVE_PRODUCT”,它会按预期删除该项目。
#2.1 如果我调度 ADD_PRODUCT 然后重新加载我的应用程序,state.products 会按预期重新水化并包含最近添加的产品。
#2.1. 但是,在我重新加载应用程序后,尝试调用 REMOVE_PRODUCT(与我在上面 #1 中调用 REMOVE_PRODUCT 的方式完全相同)。即使 state.products 包含产品 state.products.indexOf(action.product); 返回 -1,因此它不会被删除。
为什么在调用 REMOVE_PRODUCT 时,#1 中的 IndexOf 方法可以正常工作。但是,如果我添加一个产品(ADD_PRODUCT)然后重新加载我的应用程序并调用 REMOVE_PRODUCT,IndexOf 会返回 -1,即使它存在于 state.products 中
【问题讨论】:
标签: javascript reactjs react-native redux react-redux