如何从不是 HomeScreen 的组件内部访问 react-navigation?
How do I access react-navigation from inside a component that isn't the HomeScreen?
我正在构建一个 React Native 应用程序。我已经从 react-navigation 导入了 createStackNavigator。我能够让它在我的主屏幕上运行——我点击一个按钮,它把我带到一个新组件。这是我用来将它带入我的 Home.js
的代码
// 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 />;
}
}
我的主页有一个菜单,其中有一个菜单项列表。我试图让 MenuItems 跳转到适当的页面。当我尝试在 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')
.
我是否需要将导航器在 props 中向下传递给 Menu.js
,然后再传递给 MenuItem.js
?文档提供了示例,但这些示例似乎假设您将所有代码塞进一个文件而不是跨多个组件。
我设置正确了吗?
当使用来自 react-navigation 的 Navigator 时,只有您声明为 Screens 的组件继承导航道具(在您的情况下为 Home and Roads)
这意味着您需要将其作为道具传递给它的 children,如您所说:
<Menu navigation={this.props.navigation} />
<MenuItem navigation={this.props.navigation} />
如果有人想知道如何从不在导航器内的组件导航,那么我建议阅读 react-navigation 文档的这一部分
https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html
我正在构建一个 React Native 应用程序。我已经从 react-navigation 导入了 createStackNavigator。我能够让它在我的主屏幕上运行——我点击一个按钮,它把我带到一个新组件。这是我用来将它带入我的 Home.js
的代码// 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 />;
}
}
我的主页有一个菜单,其中有一个菜单项列表。我试图让 MenuItems 跳转到适当的页面。当我尝试在 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')
.
我是否需要将导航器在 props 中向下传递给 Menu.js
,然后再传递给 MenuItem.js
?文档提供了示例,但这些示例似乎假设您将所有代码塞进一个文件而不是跨多个组件。
我设置正确了吗?
当使用来自 react-navigation 的 Navigator 时,只有您声明为 Screens 的组件继承导航道具(在您的情况下为 Home and Roads)
这意味着您需要将其作为道具传递给它的 children,如您所说:
<Menu navigation={this.props.navigation} />
<MenuItem navigation={this.props.navigation} />
如果有人想知道如何从不在导航器内的组件导航,那么我建议阅读 react-navigation 文档的这一部分
https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html