我有4个页面: App.js,HomeScreen.js,Login.js,Toolbar.js
带有StackNavigator的我的应用程序页面:
import React, { Component } from 'react';
import {
Platform,
StyleSheet,
Text,
View
} from 'react-native';
import { StackNavigator, DrawerNavigator } from 'react-navigation';
import Splash from './screens/Splash';
import HomeScreen from './screens/HomeScreen';
import Login from './screens/Login';
import Lobby from './screens/Lobby';
import Wifi from './screens/Wifi';
import Toolbar from './components/ToolBar/Toolbar';
import Mobile from './screens/Mobile';
;
const Navigation = StackNavigator({
Splash:{screen: Splash},
HomeScreen:{screen: HomeScreen},
Login:{screen: Login},
Lobby:{screen: Lobby},
Wifi:{screen: Wifi},
Mobile:{screen:Mobile}
}, {
mode: 'modal',
headerMode: 'none'
});
export default Navigation;我正在导入工具栏到HomeScreen,并希望通过导航道具从HomeScreen到工具栏,这样我就可以从工具栏和HomeScreen访问登录页面。
我的工具栏页面:
import React,{Component} from 'react';
import {Text, View, Button, StyleSheet, TouchableOpacity,
Dimensions,
Image,ScrollView, Picker, FlatList} from 'react-native';
import { StackNavigator, DrawerNavigator } from 'react-navigation';
import config from '../../components/config/index';
class Toolbar extends Component{
constructor(){
super()
this.state = {
}
}
render(){
//const {navigate} = this.props.navigation;
return(
<View style={styles.mainToolbar}>
<View style={styles.containerForThree}>
<View style={styles.leftArrowContainer}>
<TouchableOpacity
onPress={()=>navigate('Login')}
>
<Text>hello</Text>
</TouchableOpacity>
</View>到目前为止,我已经将const navigate注释掉了,因为如果HomeScreen出现了,它将不会加载。
HomeScreen:
import React,{Component} from 'react';
import {
AppRegistry, StyleSheet, Text, View, Image, ScrollView, Button, TouchableOpacity, Dimensions
} from 'react-native';
import { StackNavigator } from 'react-navigation';
import Toolbar from '../components/ToolBar/Toolbar';
export default class HomeScreen extends Component {
static navigationOptions ={
title: 'Home Screen'
};
onValueChange(value, idx){
this.setState({
language: value
})
AsyncStorage.setItem('language', value)
}
render(){
var {navigate} = this.props.navigation;
return(
<View style={styles.scrollContainer}>
<Toolbar navigate={navigate}/>
<View>
<Text>Welcome To the SEcond Page</Text>
<Button
onPress={
()=>navigate("Login")
}
title="Go to Login"
/>
</View>我尝试通过以下方式将导航道具从HomeScreen传递到工具栏
当我按下按钮时,它显示找不到变量‘导航’。然而,当我取消对工具栏导航的注释时,我得到了错误TypeError:未定义的不是一个对象(评估'this.props.navigation.navigate')
发布于 2018-01-11 17:37:39
这里,您正在向Toolbar传递一个正确的navigate:<Toolbar navigate={navigate}/>
因此,您需要在render()中这样引用它:const { navigate } = this.props;
所以只是一个小错误,但这就是修复它的方法。
我个人鼓励将navigation传递给Toolbar:<Toolbar navigation={ this.props.navigation } />。因此,您可以获得导航对象的更多可见性。
发布于 2018-08-10 15:45:59
你可以使用React导航的withNavigation属性。如果要从组件导航。https://reactnavigation.org/docs/en/connecting-navigation-prop.html
发布于 2019-01-28 14:58:57
它是关于包装withNavigation HOC到相应的组件,而不是发送一个道具给孩子
https://stackoverflow.com/questions/48203708
复制相似问题