如何从不是HomeScreen的组件内部访问反应导航?

时间:2018-09-06 09:57:45

标签: javascript react-native react-navigation react-native-ios

我正在构建一个React Native应用程序。我已经从react-navigation导入了createStackNavigator。我可以在主屏幕上运行它-单击一个按钮,它将带我到一个新组件。这是我用来将其带入Home.js的代码

1. Include <link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet"> to html template.
2. Use it: <h1>Hello world! <i class="em-svg em-100"></i></h1>

我的主页进入一个包含MenuItems列表的Menu。我试图让MenuItems跳到适当的页面。当我尝试在// src/components/Home/Home export class Home extends Component { render() { return ( <React.Fragment> <Button title="Test button" onPress={() => this.props.navigation.navigate('Roads')} /> <StatusBar /> <Header /> <Menu /> </React.Fragment> ); } } const RootStack = createStackNavigator( { Home: Home, Roads: Roads, }, { initialRouteName: 'Home', } ); export default class App extends React.Component { render() { return <RootStack />; } } 的render方法中引入导航时,如下所示:

MenuItem.js

我收到以下错误消息:

// src/components/Roads/Roads render() { const { navigate } = this.props.navigation; console.log(this.props, "props is here");

我是否需要将导航器中的道具传递给TypeError: undefined is not an object (evaluating 'this.props.navigation.navigate'),然后传递给Menu.js?这些文档提供了示例,但似乎是示例,它们假定您将所有代码都放入一个文件中,而不是跨多个组件。

我正确设置了吗?

1 个答案:

答案 0 :(得分:1)

在通过反应导航使用导航器时,只有您声明为屏幕的组件会继承导航道具(在您的情况下为Home and Roads)

这意味着您将需要像它所说的那样将其作为道具传递给孩子:

<Menu navigation={this.props.navigation} />
<MenuItem navigation={this.props.navigation} />

如果有人想知道如何从不在Navigator内的组件进行导航,那么我建议阅读react-navigation文档的这一部分

https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html