我有一个使用Redux和redux-persist的React Native移动应用。
假设状态形状目前如下:
notifications: {
new_messages: 2,
new_friend_requests: 0,
new_jobs: 0
}
假设我们当前使用1个reducer设置这些值,其中action.notifications
是包含键new_messages
,new_friend_requests
和new_jobs
的字典。
const notifications = (state = {}, action) => {
switch (action.type) {
case SET_NOTIFICATIONS:
return action.notifications;
default:
return state;
}
}
我想
new_friend_requests
重命名为new_friend_requests_count
new_messages
重命名为new_messages_count
新的状态形状如下所示:
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状态形状。我的问题是,处理这种情况的优雅方式是什么?
编辑:我意识到错误消息可能完全是由于重命名变量,并且减速器拆分/分解可能不相关。但是,如何优雅地重命名这些变量而不会遇到错误?
答案 0 :(得分:0)
似乎其他人之前遇到过这种情况,并且他们的方法是使用版本号,并且如果本地版本号是<则擦除状态清理。当前版本号