react-navigation - 无法读取属性'导航'未定义的

时间:2017-07-27 12:19:08

标签: react-navigation

我是React Native的新手,并尝试创建我的第一个应用。所以我有一个问题:

我有2个屏幕(使用反应导航)。在第一个屏幕上有一个带有微调器的app徽标(来自native-base)并同时提取到服务器。而且只有在获取结束并处理响应时我才需要导航到另一个屏幕。请帮我找错!

index.ios.js

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TextInput,TouchableHighlight
} from 'react-native';
import { StackNavigator } from 'react-navigation';
import LoadingScreen from './src/screens/LoadingScreen.js';
import MainContainer from './src/screens/MainContainer.js';

export default class Calculator2 extends Component {
  render() {
    return (
      <LoadingScreen/>
    );
  }
}
const AppNavigator = StackNavigator({
  Loading: {
    screen: LoadingScreen
   },
  Main: {
    screen: MainContainer
  }
});

AppRegistry.registerComponent('Calculator2', () => Calculator2);

LoadingScreen.js:

import React, { Component } from 'react';
import {
  AsyncStorage,
  AppRegistry,NetInfo,
  Text,Image,View
} from 'react-native';
import { StackNavigator } from 'react-navigation';
import AppNavigator from '../../index.ios.js';
import { Container, Header, Content, Spinner } from 'native-base';

export default class LoadingScreen extends Component {
  static navigationOptions = {
    title: 'Loading',
  };
  constructor(props){
   super(props);

  }
  componentDidMount(){
    const {navigate} = this.props.navigation;
    fetch('url').then( (response) => {navigate('Main')});
  }
  render() {
    return(
          <View>
            App logo with spinner
          </View>
   );
  }
}

MainContainer.js

import React, { Component } from 'react';
import {
  AppRegistry,Alert,NetInfo,
  StyleSheet,
  Text,
  View,ActivityIndicator,
  TextInput,TouchableHighlight
} from 'react-native';

import { StackNavigator } from 'react-navigation';
import AppNavigator from '../../index.ios.js';

export default class MainContainer extends Component {
  static navigationOptions = {
    title: 'Main',
  };

  render() {
    return (
      <View  style={{flexDirection: 'column'}}>
         ...
      </View>
    );
  }
}

我得到的只是一个错误&#34;无法读取属性&#39;导航&#39;未定义&#34;在LoadingScreen.componentDidMount

UPD 实际上,我的fetch应该是一个获得响应并处理它的函数,它应该等到处理完毕:

async function getData(){
    var response = await fetch('url', {
      method: 'GET'
    });
    storage = await response.json(); // storage for response
    regions = Object.keys(storage); // an array of regions names
    console.log(storage, Object.keys(storage));
  };

2 个答案:

答案 0 :(得分:2)

您需要注册AppNavigator组件而不是Calculator2

.towardZero

答案 1 :(得分:0)

只需更新您的LoadingScreen.js的componentDidMount函数,如下所示:

componentDidMount() {
 var self = this;
   fetch('url').then( (response) => {
        self.props.navigation.navigate('Main')
   });
}