Redux 使用 React 导航持久化



我有存储 config.autologin 属性和 Redux-persist。当我创建一个 React-navigation 堆栈时,我想检查自动冻结值,但此时状态尚未解除冻结。我以为PersistGate是我需要的,但事实并非如此。你可以帮我吗?谢谢

应用.js

export default class App extends React.Component {
  render() {
    return (
      <Provider store={reduxStore}>
        <PersistGate loading={null} persistor = {persistor}>
          <AppContainer
            ref={navigatorRef => {
              NavigationService.setTopLevelNavigator(navigatorRef);
            }}
          />
        </PersistGate>
      </Provider>
    );
  }
}

重新存储

const persistState = {
    key: 'root',
    storage,
    whitelist: ['config']
}
const persistedReducer = persistReducer(persistState, reducers)
export const reduxStore = createStore(persistedReducer, devToolsEnhancer({ realtime: true }))
export const persistor = persistStore(reduxStore)

应用导航

selectInitialRoute = () =>{
    if(reduxStore.getState().config.autoLogin)
        return 'DrawerStack'
    else
        return 'Home'
}
const defaultNavigation = createStackNavigator({
    Home: loginNavigation,
    DrawerStack: defaultDrawerNavigation
}, {
    initialRouteName: this.selectInitialRoute(),
    defaultNavigationOptions: {
        header: null
    },
}
)
const AppContainer = createAppContainer(defaultNavigation);
export default AppContainer

我的应用程序中也有类似的情况。我有两个抽屉:LoggedDrawer 和 UnloggedDrawer,我需要在初始化它们之前检查用户是否登录/注销以显示每个状态的特定抽屉。

您可能可以看到状态在呈现方法中已正确更新。如果你想事先获得这个状态,你需要getDerivedStateFromProps

我相信在您的情况下,它会是这样的:

static getDerivedStateFromProps(nextProps, prevState) {
  if(nextProps.autoLogin !== prevState.autoLogin) {
    return 'Home'
  } else {
    return 'DrawerStack'
  }
}

因此,您将拥有来自redux(nextProps)和prevState(来自组件的状态)的状态,然后您将检查它们是否不同,然后采取相应的行动。

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新