首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux-persist未更新状态

Redux-persist未更新状态
EN

Stack Overflow用户
提问于 2021-06-25 17:02:22
回答 1查看 189关注 0票数 1

我是第一次使用React Native和Redux。目前我正在做一个使用世博会的项目,我想将一些“笔记”存储到Redux store中,并坚持使用AysncStorage。

我的store.js:

代码语言:javascript
复制
import thunk from 'redux-thunk';

import {eventReducer,appReducer, noteReducer} from './reducers';
import { persistStore, persistReducer,autoMergeLevel2,hardSet } from 'redux-persist'
import AsyncStorage from '@react-native-async-storage/async-storage';
const notePersistConfig = {
    key: 'note',
    storage: AsyncStorage,
    stateReconciler: autoMergeLevel2,
    timeout:null
  }
  
const rootReducer = combineReducers({ 
    events:eventReducer,
    app:appReducer,
    note: persistReducer(notePersistConfig, noteReducer),
    //note:noteReducer
});

export const store = createStore(rootReducer, applyMiddleware(thunk));
export const persistor = persistStore(store);

我的app.js

代码语言:javascript
复制
import { store, persistor} from './redux/store';
import { PersistGate } from 'redux-persist/integration/react'
...
return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <NavigationContainer theme={MyTheme}>
          <Drawer.Navigator drawerPosition="right">
            <Drawer.Screen name="Home" component={Home} />
          </Drawer.Navigator>
        </NavigationContainer>
      </PersistGate>
    </Provider>
  );
...

如果我不使用persistReducer (即普通的noteReducer),我可以更新状态并在我的应用程序中反映新的值。但在应用persistReducer之后,它似乎根本不会更新状态。

我从reducer返回的状态正在生成正确的结果:

代码语言:javascript
复制
export const noteReducer = (state=noteInitialState, action)=>{
    console.log("noteReducer",action)
    console.log("note State is",state)

    switch (action.type) {
        
        
        case 'SET_NOTE':
            var new_state = state
            new_state[action.payload.date] = {...new_state[action.payload.date],note:action.payload.note}
            console.log("here.... save note?",new_state)
            return new_state;
        
        default:
            return state
    }
    
}

我尝试添加一个注释"What is inside“,reducer生成了以下内容:

代码语言:javascript
复制
noteReducer Object {
  "payload": Object {
    "date": "2021-06-28",
    "note": "What is inside",
  },
  "type": "SET_NOTE",
}
note State is Object {}
here.... save note? Object {
  "2021-06-28": Object {
    "note": "What is inside",
  },
}

然后我尝试在同一日期输入"Save see“,我可以看到状态仍然是空的

代码语言:javascript
复制
noteReducer Object {
  "payload": Object {
    "date": "2021-06-28",
    "note": "Save again",
  },
  "type": "SET_NOTE",
}
note State is Object {}
here.... save note? Object {
  "2021-06-28": Object {
    "note": "Save again",
  },
}

没有任何错误消息,但它似乎什么也做不了。我的代码有什么问题吗?这两天我一直在尝试这个问题。非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-26 00:18:42

我认为您需要根持久化配置,并将rootReducer作为参数放入persistReducer(rootPersistConfig,rootReducer)

代码语言:javascript
复制
import thunk from 'redux-thunk';
import {eventReducer,appReducer, noteReducer} from './reducers';
import { persistStore, persistReducer,autoMergeLevel2,hardSet } from 'redux-persist'
import AsyncStorage from '@react-native-async-storage/async-storage';

const notePersistConfig = {
key: 'note',
storage: AsyncStorage,
stateReconciler: autoMergeLevel2,
timeout:null
}

const rootPersistConfig = {
key: 'root',
storage: AsyncStorage,
}

const rootReducer = combineReducers({ 
events:eventReducer,
app:appReducer,
note: persistReducer(notePersistConfig, noteReducer),
//note:noteReducer
});

const persistedReducer = persistReducer(rootPersistConfig, rootReducer)

export const store = createStore(persistedReducer, applyMiddleware(thunk));
export const persistor = persistStore(store);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68128299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档