簡體   English   中英

無法在本機反應中使用堆棧導航器

[英]Not able to use stack navigator in react native

App.js 文件:

import 'react-native-gesture-handler';
        import * as React from 'react';
        import { NavigationContainer } from '@react-navigation/native';
        import { createStackNavigator } from '@react-navigation/stack';
        import Navigator from './routes/homeStack';
        import { StyleSheet, Text, View, Button } from 'react-native';

        export default function App(){
          return(

               <Navigator />

          );
        }


        const styles= StyleSheet.create({
          container:{
            fontSize: 24,
          }
        });

編輯Apollo.js 文件:

import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text, TouchableOpacity, FlatList, 
TouchableHighlight} from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import firebase from 'firebase';
 if (!firebase.apps.length) {
   firebase.initializeApp({});}
class EditApollo extends Component {
 constructor(props){
  super(props);
    this.state={
    users1:[]
   }
  }
 componentDidMount= () =>{
  firebase.database().ref('users1').once('value').then(snapshot => {
     var items = [];
   snapshot.forEach((child) => {
     items.push({
        email: child.val().email,
        password: child.val().password,
       // price: child.val().price,
     });
  });
  this.setState({ users1: items});
  console.log(this.state.users1)
   });
  }
  render() {
  return(
    <View style={styles.container}>
   <FlatList style={{width:'100%'}} data={this.state.users1} showsVerticalScrollIndicator={false}
   renderItem={elem => (<View style={{elevation:8, marginBottom:13, borderRadius:15, 
  backgroundColor:'#575FCF', padding:20}}>
   <Text style={{fontSize:18, fontWeight:'bold', color:'#fff'}}>{elem.item.email}</Text>
  <Text style={{fontSize:18, fontWeight:'bold', lineHeight:25, color:'#fff'}}>{elem.item.password}  
  </Text>
  <View>
   <TouchableHighlight onPress={() => this.props.navigation.navigate('Edit1')}>
       <View>
             <Icon size={30} color="white" name="edit" />
       </View>
   </TouchableHighlight>        
   <TouchableHighlight>
      <View>
            <Icon size={30} color="white" name="close" />
      </View>
    </TouchableHighlight>        
  </View>
 </View>)}
  />
 </View>
 )
 }
 }
 export default EditApollo;

用於導航我的文件是 homeStack.js

import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Login from '../src/pages/Login';
import EditApollo from '../src/pages/EditApollo';
 import Edit1 from '../src/pages/Edit1';

 const screens={
  Login:{
    screen: Login,
    navigationOptions:{
    title: 'Login Page',
    headerStyle:{ backgroundColor:'#333' }
    } 
 },
 EditApollo:{
  screen: EditApollo,
  navigationOptions:{
    title: 'Edit Apollo Records',
    headerStyle:{ backgroundColor:'#333' }
   }
 },
 Edit1:{
    screen: Edit1,
   navigationOptions:{
    title: 'Edit Records',
    headerStyle:{ backgroundColor:'#333' }
   }
 },
 }

const HomeStack = createStackNavigator(screens, {
defaultNavigationOptions:{
    headerTintColor: '#eee',    
    headerStyle:{ height:50 }
 }
  });
export default createAppContainer(HomeStack);

Edit.js 文件是

import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text } from 'react-native';
class Edit1 extends Component <{}>{
render(){
    return (
            <View style={styles.container}>
                <Text>hii</Text>
            </View>
        );
        }
    }
 const styles = StyleSheet.create({
 container: {
 flex:1,
 justifyContent: 'center',
  alignItems: 'center',
  backgroundColor: '#fff',
   },
 });
 export default Edit1;

package.json 文件:

  {
   "name": "newapp",
   "version": "0.0.1",
   "private": true,
   "scripts": {
  "android": "react-native run-android",
  "ios": "react-native run-ios",
  "start": "react-native start",
  "test": "jest",
 "lint": "eslint ."
 },
 "dependencies": {
 "@react-native-community/masked-view": "^0.1.10",
 "@react-navigation/native": "^5.1.6",
 "@react-navigation/stack": "^5.2.13",
 "firebase": "^7.14.2",
 "react": "16.11.0",
 " react-native": "0.62.2",
 "react-native-elements": "^1.2.7",
 "react-native-gesture-handler": "^1.6.1",
 "react-native-keyboard-spacer": "^0.4.1",
 "react-native-reanimated": "^1.8.0",
 "react-native-safe-area-context": "^0.7.3",
 "react-native-screens": "^2.5.0",
 "react-native-table-component": "^1.2.1",
 "react-native-vector-icons": "^6.6.0",
 "react-navigation": "^4.3.8",
 "react-navigation-drawer": "^2.4.12",
 "react-navigation-stack": "^2.3.13"
 }, 
 "devDependencies": {
 "@babel/core": "7.9.0",
 "@babel/runtime": "7.9.2",
 "@react-native-community/eslint-config": "0.0.5",
 "babel-jest": "24.9.0",
  "eslint": "6.8.0",
 "jest": "24.9.0",
  "metro-react-native-babel-preset": "0.58.0",
  "react-test-renderer": "16.11.0"
 },
"jest": {
 "preset": "react-native",
 "setupFiles": [
   "./node_modules/react-native-gesture-handler/jestSetup.js"
 ]
 }
 }

我想導航到 Edit1 頁面,但 onPress 中出現錯誤,顯示 TypeError:undefined is not an object(evalating '__this2.props.navigation.navigate') 我應該怎么做才能解決錯誤? 為什么錯誤在 this.props.navigation.navigate 有什么具體原因?

當您在 updateApollo 中加載 EditApollo 時,您需要將導航道具傳遞給您的 EditApollo

在您的 UpdateApollo.js 中:

改變:

<EditApollo />

<EditApollo navigation={navigation} />

這將解決您的錯誤。

檢查圖像以供參考:

在此處輸入圖像描述

按下它正在導航到編輯屏幕:

在此處輸入圖像描述

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM