Хранилище Redux, доступное вне компонента, возвращает исходное состояние - PullRequest
0 голосов
/ 17 сентября 2018

Я хотел бы знать, выполнимо ли то, чего я пытаюсь достичь, и если да, то я хотел бы узнать, что я делаю неправильно. Я использую библиотекуact-native-threads, чтобы создать отдельный «поток». Внутри должна быть некоторая функция setInterval, которая проверяет текущее состояние приложения, скажем, каждые 20 секунд. Теперь внутри этой ветки я пытался сделать что-то похожее на то, что было описано в лучшем ответе на этот вопрос: Каков наилучший способ получить доступ к хранилищу резервов вне реагирующего компонента? Тем не менее, я использую redux-persist, поэтому у меня нет простой переменной store внутри файла конфигурации store. Код для настройки магазина:

    const rootReducer = combineReducers({
    appState: appStateReducer,
    entries: entriesReducer,
    listHelper: listHelperReducer,
    authenticate: authenticateReducer
})

const persistConfig = {
    key: 'root',
    storage,
    stateReconciler: autoMergeLevel2,
    blacklist: [ 'appState' , 'listHelper'],
    whitelist: ['authenticate' , 'entries']

}
const pr = persistReducer(persistConfig, rootReducer)
const configureStore = () => {
    const store = createStore(pr,  devToolsEnhancer({ realtime: true, hostname: 'localhost', port: 8082 }))

    const persistor = persistStore(store)
    return { persistor, store }
}
export default configureStore

Я попытался импортировать configureStore из этого файла и получить доступ к такому состоянию в index.thread.js:

console.tron.log(configureStore().store.getState());

Однако это возвращает исходное состояние. Мне нужно текущее состояние после регидратации. Кто-нибудь пытался решить подобную проблему? Буду очень признателен за любые подсказки. Спасибо.

Редактировать: вот файл index.js, где вызывается configureStore.

const store = configureStore();
const RNRedux = () => (
  <Provider store={store.store}>
    <PersistGate loading={<LoadingScreen />} persistor={store.persistor}>
      <App />
    </PersistGate>
  </Provider>
);


AppRegistry.registerComponent("ProjectName", () => RNRedux);

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете вызвать createStore в файле вашего магазина и экспортировать его оттуда.

const pr = persistReducer(persistConfig, rootReducer);
const store = createStore(pr,  devToolsEnhancer({ realtime: true, hostname: 'localhost', port: 8082 }))
const configureStore = () => {
    const persistor = persistStore(store)
    return { persistor, store }
}

export default configureStore

Теперь вы можете использовать магазин, как показано ниже.

console.tron.log(configureStore.store.getState());
...