如何正确延迟渲染

问题描述 投票:2回答:2

//offline.就是

import { offline } from '@redux-offline/redux-offline';
import offlineConfig from '@redux-offline/redux-offline/lib/defaults';

const config = params => ({
  ...offlineConfig,
  persistCallback: params.persistCallback
});

export default params => offline(config(params));

//app.就是

class App extends Component {

  componentWillMount() {
    this.store = Reactotron.createStore(
      reducers,
      undefined,
      compose(
        applyMiddleware(ReduxThunk),
        offline({ persistCallback: this.startApp })
      )
    );
  }

  startApp = () => {
    if (this.store.getState().auth.loggedIn) {
      const resetAction = StackActions.reset({
        index: 0,
        actions: [NavigationActions.navigate({ routeName: 'summmary' })],
      });
      this.props.navigation.dispatch(resetAction);
    }
  }

  render() {
    return (
      <Provider store={this.store}>
        <MainNavigator />
      </Provider>
    );
  }
}

export default App;

我有2个屏幕summarylogin默认情况下将呈现login屏幕。但是我添加了这个逻辑this.store.getState().auth.loggedIn来检查如果它是真的然后将屏幕发送到summary但我得到Cannot read property 'dispatch' of undefined

reactjs react-native react-redux react-navigation redux-offline
2个回答
0
投票

导航道具可用于MainNavigator中包含的Screen组件。

您正尝试在导航器外部的App组件中使用它,因此未定义。

在这种情况下,建议使用文档中描述的“无导航道具导航”方法:https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html


0
投票

您收到该错误,因为您没有范围内的navigation对象。

理想情况下,你的App.js文件本身应该有StackNaviator类。因此,在那里声明的第一个对象将是你要登陆的第一个屏幕。在那里你可以编写将其调度到另一个屏幕的逻辑,因为你在范围内也有navigation对象。

有点像 -

你的App.js

createStackNavigator({
  Home: {
  screen: HomeScreen}
})

所以,你的主屏幕将首先启动,你在App.js写的关于调度动作的逻辑可以移动到这个HomeScreen

© www.soinside.com 2019 - 2024. All rights reserved.