0

ドキュメントとしてDrawerNavigatorを'react-navigation'に統合しました。しかし、私はプロジェクトを実行するときは、常にこのエラーを取得するときにボタンをクリックします:DrawerNavigatorを使用するとthis.props.navigationは定義されていません

TypeError: undefined is not an object (evaluating 'this.props.navigation.navigate')

をそして私は左から右にスワイプすると、何も開いて、何の引き出しを起こりません。

私はthis.propsをチェックしましたが、コンソールには常に{}のログが空です。 私は多くのソリューションを試しましたが、まだ動作していません。

calculator.js

export default class Calculator extends Component { 
    constructor(props) { 
     super(props); 
    } 

    static navigationOptions = { 
     drawerLabel: 'Calculator', 
     drawerIcon: ({ tintColor }) => (
      <Image 
       source={require('./../../res/images/icon_calculator.png')} 
       style={[styles.icon, {tintColor: tintColor}]} 
      /> 
     ), 
    }; 

    render() { 
     return (
      <View style={styles.container}> 
       <View> 
        <Text style={styles.title}>Tip Calculator</Text> 
       </View> 
       <Button 
        onPress={() => this.props.navigation.navigate("SettingsScreen")} 
        title="Go to settings" 
       /> 
      </View> 
     ); 
    } 
} 

module.exports = Calculator; 

settings.js

export default class Settings extends Component { 
    constructor(props) { 
     super(props); 
    } 

    static navigationOptions = { 
     drawerLabel: 'Settings', 
     drawerIcon: ({ tintColor }) => (
      <Image 
       source={require('./../../res/images/icon_settings.png')} 
       style={[styles.icon, {tintColor: tintColor}]} 
      /> 
     ), 
    }; 

    render() { 
     return (
      <View style={styles.container}> 
       <Text>Settings</Text> 
       <Button 
        onPress={() => this.props.navigation.goBack()} 
        title="Go back home" 
       /> 
      </View> 
     ); 
    } 
} 

module.exports = Settings; 

navigation.js

import { 
    DrawerNavigator 
} from 'react-navigation'; 
import Calculator from './../components/calculator/calculator.js'; 
import Settings from './../components/settings/settings.js'; 


const RootDrawer = DrawerNavigator({ 
    CalculatorScreen: { 
     path: '/', 
     screen: Calculator 
    }, 
    SettingsScreen: { 
     path: '/sent', 
     screen: Settings 
    } 
}, { 
    initialRouteName: 'CalculatorScreen', 
    drawerPosition: 'left' 
}); 

export default RootDrawer; 

のApp.js

export default class App extends Component<{}> { 
    render() { 
    return (
     <Calculator/> 
    ); 
    } 
} 

index.js

import { AppRegistry } from 'react-native'; 
import App from './App'; 

AppRegistry.registerComponent('rn_tip_calculator',() => App); 

は私がDrawerNavigatorStackNavigatorを使用する必要がありますか、または私はconfigに何かを逃したのですか?すべてのヘルプは理解されるであろうhttps://github.com/HCMUS-IceTeaViet-SE/rn_tip_calculator

完全なソースコードは、それだけの簡単なサンプルプロジェクトです、是非ご覧下さい。ありがとう!あなたがディスパッチAPIを使用することができます

+0

あなたはアプリに「接続」していない、またはナビゲーションを搭載していないためです。アプリに渡されない前に、私はここで見つかったと誤解している... https://github.com/HCMUS-IceTeaViet-SE/rn_tip_calculator/blob/master/app/powerranger.js ナビゲータあなたは25行目を通過し、小文字ですが、大文字ではないでしょうか? –

+0

@ GavinThomasだから、app.jsのAppコンポーネントの代わりにDrawerNavigatorを登録するためにAppRegistryを変更する必要がありますか?どうして?両方を登録するとどうなりますか? – nhoxbypass

+0

両方をレンダリングすることはできません。あなたは、あなたのアプリケーションをレンダリングし、RootDrawerをアプリケーションにインポートし、それを電卓に渡す必要があります。私は確かに明日見える! –

答えて

0

これは、私のDrawerNavigatorを自分のアプリケーションに「接続」していないために起こります。

これを達成するための2つの方法があります:

  • 最初の方法:アプリのルートコンポーネントとしてDrawerNavigatorを登録します。 index.js変更で:それは今無用だからAppRegistry.registerComponent('rn_tip_calculator',() => RootDrawer);

    からAppRegistry.registerComponent('rn_tip_calculator',() => App);

    から

    だからApp.jsを削除することができます。

  • 第2の方法:アプリケーションのルートコンポーネントとしてAppコンポーネント(App.js内)を保持します。次に、Appのコンポーネントの中にDrawerNavigatorをアプリケーションに「接続」するためのコンポーネントを入れます。

    export default class App extends Component<{}> { 
        render() { 
        return (
         <RootDrawer/> 
        ); 
        } 
    } 
    

documentは、アプリへのルート・コンポーネント内部のレジスタコンポーネントまたは入れナビゲーターについて何をナビゲーターに接続しない方法について何も言いません。私のようなこのドライブ初心者は怒っている!

1

https://reactnavigation.org/docs/navigators/navigation-actions

1)輸入ナビゲーションアクション

import { NavigationActions } from 'react-navigation' 

2)派遣ナビゲーションアクション:

const navigateAction = NavigationActions.navigate({ 
    routeName: 'SettingsScreen', 
    params: {}, 
}) 

this.props.navigation.dispatch(navigateAction) 
+0

私は試みますが、なぜ私のコードがうまくいかないのですか?それは文書と同じです – nhoxbypass

1

は私がするように反応する、ネイティブかなり新しいですが、時にはこれは私にも起こります。私はReduxのスタック・ナビゲーターを使用して....しかし、ここで私の作業例です...

import { StackNavigator } from 'react-navigation' 
import { Animated, Easing } from 'react-native' 
import LoginScreen from '../Containers/LoginScreen' 
import LaunchScreen from '../Containers/LaunchScreen' 
import HomeScreen from '../Containers/HomeScreen' 
import SignUpScreen from '../Containers/SignUpScreen' 
import SettingsScreen from '../Containers/SettingsScreen' 
import VehicleCreateScreen from '../Containers/VehicleCreateScreen' 
import styles from './Styles/NavigationStyles' 

// Manifest of possible screens 
const PrimaryNav = StackNavigator({ 
    LoginScreen: { screen: LoginScreen }, 
    LaunchScreen: { screen: LaunchScreen }, 
    HomeScreen: { screen: HomeScreen }, 
    SignUpScreen: { screen: SignUpScreen }, 
    SettingsScreen: { screen: SettingsScreen }, 
    VehicleCreateScreen: { screen: VehicleCreateScreen } 
}, { 
    // Default config for all screens 
    headerMode: 'none', 
    initialRouteName: 'LaunchScreen', 
    navigationOptions: { 
     headerStyle: styles.header 
    }, 
    transitionSpec: { 
     duration: 0, 
     timing: Animated.timing, 
     easing: Easing.step0, 
    }, 
    }, 


) 

export default PrimaryNav 

そしてあなたがREDUX

import React, { Component } from 'react'; 
import { Container, Content, List, ListItem, Icon, Text, Button, Left, Right, Badge } from 'native-base'; 
import { Image } from 'react-native' 
import styles from './Styles/SideBarStyle'; 
// import backgroundImage from '../Images/vw.jpg' 

const backgroundImage = require("../Images/vw.jpg"); 
const drawerImage = require("../Images/dirtyHandsDark.jpg"); 


export default class SideBar extends Component { 
    constructor(props) { 
     super(props); 
    } 
    render() { 
     // *********** HERE WE DECLARE AN ARRAY TO RENDER LISTS FROM. THIS COULD ALSO BE LIST OF BIKES FROM STORE.. *********** 
     const datas = [ 
      { 
       name: "Home", 
       route: "HomeScreen", 
       icon: "settings", 
       bg: "#C5F442", 
      }, 
      { 
       name: "Repair", 
       route: "HomeScreen", 
       icon: "settings", 
       bg: "#C5F442", 
      }, 
      { 
       name: "My Profile", 
       route: "SettingsScreen", 
       icon: "settings", 
       bg: "#C5F442", 
      }, 

     ]; 


     return (
      <Container> 
       <Content bounces={false} style={{ flex: 1, backgroundColor: "#fff", top: -1 }}> 
        <Image source={backgroundImage} style={styles.drawerCover}> 
         <Image square style={styles.drawerImage} source={drawerImage} /> 
        </Image> 
        <List 
         dataArray={datas} 
         renderRow={data => 
          // *********** CREATE NEW LIST ITEM ON CLICK NAVIGATE TO APPROPRIATE LISTITEM.SCREEN *********** 
          <ListItem button noBorder onPress={() => this.props.navigation.navigate(data.route)}> 
           <Left> 
            <Icon active name={data.icon} style={{ color: "#777", fontSize: 26, width: 30 }} /> 
            <Text style={styles.text}> 
             {data.name} 
            </Text> 
           </Left> 
           {data.types && 
            <Right style={{ flex: 1 }}> 
             <Badge 
              style={{ 
               borderRadius: 3, 
               height: 25, 
               width: 72, 
               backgroundColor: data.bg, 
              }} 
             > 
              <Text style={styles.badgeText}>{`${data.types} Types`}</Text> 
             </Badge> 
            </Right>} 
          </ListItem>} 
        /> 
       </Content> 
      </Container> 
     ); 
    } 
} 

をすることができます接続されていないコンポーネントからだ

参照してくださいthis.props.navigation.navigate問題はありません。 私のレポを参照してください。 https://github.com/GavinThomas1192/motoMechanicMeeKanic/tree/master/App

+1

私の質問にお答えいただきありがとうございます!私はあなたのソリューションを試しましたが、 "変数を見つけることができません:ナビゲート" – nhoxbypass

+0

WHOPS DidUPdateを使用してはいけない、componentDidMountを使用してください。 –

+0

まだ動作していません、 'app.js'と' index.js'を私のプロジェクト、あなたは一見できますか? – nhoxbypass

関連する問題