我正在使用 redux persist 在应用程序启动时自动保留和解除冻结状态,如文档中所述,特别是使用 AsyncStorage:https://github.com/rt2zz/redux-persist。
它适用于字符串。这是存储为字符串的所有状态,都正确保留和解除冻结。
但是,对于自定义对象映射,它确实会正确解除冻结状态。我很确定这是因为字符串是可序列化的,而对象映射不是。
这是化简器,其中 productTypeToProducts 表示该映射。当重新水合时它是空的
case 'RECEIVE_ALL_PRODUCTS':
return Object.assign({}, state, {
productTypeToProducts: action.productTypeToProducts
});
因此,我需要使用类似 JSON.stringify 的东西来将我的状态树隐藏为 JSON。
我如何实现这一点,以便在应用程序启动时对象状态(而不是 JSON)自动解除冻结。(我猜这与在文档中使用转换有关?
似乎默认情况下,AsyncStorage与redux-persist结合使用,可以正确序列化对象数组。所以我在我的化简器中将下面的 Map 转换为数组,它正确地水合了状态。
case 'RECEIVE_ALL_PRODUCTS':
let productsObject = {};
action.productTypeToProducts.forEach((value,key)=>{
productsObject[key] = value
});
return Object.assign({}, state, {
productsAsObject: productsObject,
});