当用户已经拥有本地持久存储时,如何重构/重命名Redux状态?

时间:2017-10-02 18:28:02

标签: redux

我有一个使用Redux和redux-persist的React Native移动应用。

假设状态形状目前如下:

notifications: {
    new_messages: 2,
    new_friend_requests: 0,
    new_jobs: 0
}

假设我们当前使用1个reducer设置这些值,其中action.notifications是包含键new_messagesnew_friend_requestsnew_jobs的字典。

const notifications = (state = {}, action) => {
  switch (action.type) {
    case SET_NOTIFICATIONS: 
      return action.notifications;
    default:
      return state;
  }
}

我想

  1. 摆脱new_jobs,因为它不再相关
  2. split减速机
  3. new_friend_requests重命名为new_friend_requests_count
  4. new_messages重命名为new_messages_count
  5. 新的状态形状如下所示:

    notifications: {
        new_messages_count: 2,
        new_friend_requests_count: 0
    }
    

    我们会有新的减速器

    const new_messages_count = (state = {}, action) => {
      switch (action.type) {
        case SET_NEW_MESSAGES: 
          return action.new_messages_count;
        default:
          return state;
      }
    }
    
    const new_friend_requests_count = (state = {}, action) => {
      switch (action.type) {
        case SET_CONNECTION_REQUESTS: 
          return action.new_friend_requests_count;
        default:
          return state;
      }
    }
    
    const notifications = combineReducers({
      new_messages_count,
      new_friend_requests_count
    });
    

    但是,当我进行更改时,会遇到如下错误消息:

      

    在reducer收到的先前状态中找到意外的键“new_messages”,“new_friend_requests”,“new_jobs”。预计会找到一个已知的reducer密钥:“new_messages_count”,“new_friend_requests_count”。意外的密钥将被忽略。

    我理解为什么会发生这种情况:用户之前持久的redux状态包含这些键,并且会被重新水合成我的新Redux状态形状。我的问题是,处理这种情况的优雅方式是什么?

    编辑:我意识到错误消息可能完全是由于重命名变量,并且减速器拆分/分解可能不相关。但是,如何优雅地重命名这些变量而不会遇到错误?

1 个答案:

答案 0 :(得分:0)

似乎其他人之前遇到过这种情况,并且他们的方法是使用版本号,并且如果本地版本号是<则擦除状态清理。当前版本号

https://github.com/rt2zz/redux-persist/issues/118