在屏幕之间导航时如何调试“未定义的不是对象”

时间:2019-05-11 10:45:27

标签: firebase react-native react-navigation

我正在尝试按登录按钮进入包含所有其他屏幕的“抽屉”屏幕,但是出现以下错误:

  

TypeError:undefined不是对象(正在评估   'this.props.navigation.navigate')

这是我的DrawerScreen:

import React, {Component} from 'react';
import { Button, View, Text, Dimensions, ImageBackground } from 'react-native';
import { createStackNavigator, createAppContainer, createDrawerNavigator, DrawerItems } from 'react-navigation'; 
import HomeScreen from './HomeScreen';
import AboutScreen from './AboutScreen';
import Count from './CountScreen';

const DrawerContent = (props) => (
    <View>
    <ImageBackground 
    source={{uri:'https://cdn.pixabay.com/photo/2017/12/13/07/15/natural-3016177_960_720.jpg'}}
    style={{}}
    imageStyle= {{opacity: 0.7}}
    >
    <View
      style={{
        //backgroundColor: '#73a2ef',
        height: 140,
        alignItems: 'center',
        justifyContent: 'center',
      }}
    >
      <Text style={{ color: 'black', fontSize: 40, fontWeight: 'bold' }}>
        Menu
      </Text>
    </View>
    </ImageBackground>
    <DrawerItems {...props} />
  </View>
)

const WIDTF = Dimensions.get('window').width;

const DrawerConfig = {
  drawerWidth: WIDTF*0.80,
  drawertType: 'back',
}

const Drawer = createDrawerNavigator ({

Home: {
  screen: HomeScreen
},
About: {
  screen: AboutScreen
},
Count: {
  screen: Count
},
},
{
drawerBackgroundColor: '#c7d1a7', 
contentComponent: DrawerContent,
contentOptions: {
activeTintColor: 'blue',
style: {
  flex: 1,
  paddingTop: 15,
}
}},
DrawerConfig
);

const AppContainer = createAppContainer(Drawer);

export default AppContainer;

这是我的LogInScreen:

import React, {Component} from 'react';
import * as firebase from 'firebase';
import {Container, Content, Header, Form, Input, Item, Button, Label, Drawer} from 'native-base';
import {StyleSheet, Text} from 'react-native';
import AppContainer from './DrawerNavigatorNew';

const firebaseConfig = {
  apiKey: 
  authDomain:
  databaseURL:
  projectId:
  storageBucket:
};

firebase.initializeApp(firebaseConfig);

export default class LoginScreen extends React.Component {

  constructor (props) {
    super(props)

    this.state =({
      email:'',
      password:'',
    })
  }

  signUpUser = (email, password) => {
    try {

      if(this.state.password.length <6)
      {
        alert("Please enter atleast 6 characters")
        return;
      }

      firebase.auth().createUserWithEmailAndPassword(email, password)
    }

    catch (error){
      console.log(error.toString())
    }
  }

  loginUser =(email, password) => {

    try{

      firebase.auth().signInWithEmailAndPassword(email, password).then(function(user){
        console.log(user)
      })
    }

    catch (error) {
      console.log(error.toString())
    }
  }

  render() {
    const {navigate} = this.props.navigation;
    return (
      <Container style={styles.container}>
        <Form>
          <Item floatingLabel>
            <Label> Email </Label>
            <Input
              name='email'
              autoCorrect={false}
              autoCapitalize='none'
              onChangeText={(email)=> this.setState({email})} 

              />
          </Item>

          <Item floatingLabel>
            <Label> Password </Label>
            <Input
              name='password'
              secureTextEntry={true}
              autoCorrect={false}
              autoCapitalize='none'
              onChangeText={(password)=> this.setState({password})}
              />
          </Item>

          <Button style={{marginTop: 10}}
          full
          rounded
          success
          onPress = {()=> this.loginUser(this.state.email,this.state.password) || navigate(AppContainer)}
          >
            <Text> Login </Text>
          </Button>

          <Button style={{marginTop: 10}}
          full
          rounded
          primary
          onPress = {()=> this.signUpUser(this.state.email,this.state.password)}
          >
            <Text style={{color: 'white' }}> Sign Up </Text>
          </Button>
        </Form>
      </Container>
    );
  }
}

const styles = StyleSheet.create ({
  container:{
    flex: 1,
    backgroundColor: 'white',
    justifyContent: 'center',
    padding: 10
  }
}) 

错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

我误读了代码。 “ wb = load_workbook(filename='myExcelFile.xlsx') ws1 = wb.create_sheet(title="Data") klantList = pythonData['result'] row = 0 col = 0 for klantDict in klantList: for key, value in klantDict.items(): for key in klantDict.keys(): row += 1 ws1.append(row, col, key) for item in klantDict[key]: ws1.write(row, col + 1, item) row += 1 wb.save(filename='myExcelFile.xlsx') ”是用于移动屏幕的命令。 “ Navigate”必须打开抽屉。  你可以试试这个密码吗?

createDrawenavigator

如果要移动屏幕,请更改onPress = {()=> this.loginUser(this.state.email,this.state.password) || this.props.navigation.openDrawer();} 配置。

Navigator