reactjs - 如何在 redux-persist 中正确使用 getStoredState

标签 reactjs react-native redux react-redux

我不确定我是否正确使用了 redux-persist 库中的 getStoredState 。我想使用已保留为默认 redux 存储的存储。

配置/store.js

async function getState() {
  const storedState = await getStoredState({ storage: AsyncStorage });

  const store = createStore(reducers, storedState, compose(
    applyMiddleware(logger),
    autoRehydrate()
  ));
  persistStore(store, {storage: AsyncStorage);
}

export default getState();

App.js

import store from 'config/store';
import { Provider } from 'react-redux';

export default () => (
  <Provider store={store}>
    //
  </Provider>
)

这会产生以下警告:

Warning: Failed child context type: The child context `store.subscribe` is marked as required in `Provider`, but its value is `undefined`.

Warning: Failed prop type: The prop `store.subscribe` is marked as required in `Provider`, but its value is `undefined`

有什么想法导致这些警告吗?我感觉我在 store.js 中做错了什么

最佳答案

问题是,当您尝试实例化 Provider 时,您的 store 变量仍处于待处理状态:getStoreState 方法返回 Promise,因此您必须等到它完成才能使用 store。

此示例显示了示例实现:

import {getStoredState, createPersistor} from 'redux-persist'

class App extends Component {

  constructor(props) {
    super(props)
    this.store = null
    this.persistor = null
  }

  componentWillMount(){
    const persistConfig = {storage: AsyncStorage}
    getStoredState(persistConfig, (err, restoredState) => {
      this.store = createStore(
        reducers,
        restoredState,
        compose(
          applyMiddleware(logger,)
        )
      )
      this.persistor = createPersistor(this.store, persistConfig)
      // Now that we have the store setted, reload the component
      this.forceUpdate()
    })
   }

  render() {
    if (!this.store) {
      // Loading screen
      return <Text>Loading</Text>
    } else {
      return (
          <Provider store={this.store}>
            <Router />
          </Provider>
      )
    }

  }
}

欢迎任何改进建议。

关于reactjs - 如何在 redux-persist 中正确使用 getStoredState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44573823/

相关文章:

css - 使用 React 内联自定义 `::-webkit-scrollbar`

javascript - 当我使用 setState 回调来toggleDropdown 时,我的下拉列表在选择项目后打开

javascript - React-Native Button onPress 不工作

reactjs - 如何在 React 组件中测试 Redux 的 dispatch() 是否被调用(Jest + Enzyme)

reactjs - 重定向在 React Router 中不起作用

reactjs - 如何更好地测试使用 Electron 的 actionCreator

javascript - 无法使用 useState Hook 限制功能

push-notification - react native PushNotificationIOS不监听推送通知

javascript - React 中的 memo 是什么?

javascript - 我可以将伪元素对象添加到 Material UI 自定义主题配置吗?