1

所以我在我的 react-native 应用程序中使用 redux-persist 来保持状态并且一切正常。

对于 reducer,我switch-case用来检查不同的动作类型,而对于默认值,我正在返回状态。

initialState = {
  first: null,
  second: null,
};

export default myReducer = (state = initialState, action) => {
  switch (action.type) {
    case ...:
            ... // Handling some cases which work fine
    default:
      return state;
  }
};

这件事工作正常,但如果我在默认块中替换state{...state},它不会保持状态。

现在我明白了多少state = {...state},为什么这不起作用。

这是persistConfig;

import AsyncStorage from "@react-native-async-storage/async-storage";
const persistConfig = {
  key: "root",
  storage: AsyncStorage,
};
4

1 回答 1

1

我不确定这是可以接受的答案,但也许它会提供足够的信息以发挥作用。我做了一些挖掘,这就是我发现的。

  1. 它不仅仅是改变变量的 {..state},任何克隆都会这样做,例如 Object.assign({}, state) 也会破坏持久状态。
  2. Redux persist 在关闭和打开时多次调用 reducer,其中大多数调用状态是未定义的,因此默认为初始状态(您可以通过在默认值中添加 console.log(state) console.log(action) 来查看这一点
  3. 我的猜测是,redux persist 会检查给定状态到减速器的重新分配与减速器的输出状态之间的任何变化,如果有重新分配,它会保留该值。如果这是正确的,那么当状态在应用程序关闭时设置为初始状态时,持久化器不会记录它,因为没有重新分配(如果您返回状态),但是当您将状态克隆到默认 {. ..状态}
于 2021-09-23T18:24:58.057 回答