将 React 导航传递给子组件的子组件
Passing React Navigation to Child of Child Component
我正在使用子“行”和“按钮”组件动态构建我的“屏幕”。我只使用这种方法是因为我找不到可用于 react-native 的 flex-flow 属性。
所以基本上我通过数组的数组进行映射以构建每一行,并在行内通过每个数组进行映射以构建每个按钮。因为需要在按钮中设置 onPress,所以我为每个传递了 URL
onPress{() => this.props.navigation.navigate({navigationURL})
作为道具,先到行,再到按钮。问题是我不断收到错误 'Cannot read property 'navigation' of undefined
。我确定这是因为只有导航器中的实际“屏幕”才能访问导航道具。我也试过通过
navigation={this.props.navigation}
但没有成功。我查看了所有文档,但似乎找不到任何有用的信息。还有人遇到过类似情况吗?
如果您想从不属于 navigator
的组件访问 navigation
对象,则将该组件包装在 withNavigation
HOC 中。在包装的组件中,您可以使用 this.props.navigation
访问导航。看看 official document
示例
import { withNavigation } from 'react-navigation';
...
class CustomButton extends React.Component {
render() {
return <Button title="Back" onPress={() => {
this.props.navigation.goBack() }} />;
}
}
export default withNavigation(CustomButton);
希望这会有所帮助!
啊哈,愚蠢的错误。我没有在构造函数中设置道具。感谢 Prasun Pal 的帮助!如果其他人有问题,这是我的代码。
import React, { Component } from 'react'
import { Image, Text, TouchableOpacity, View } from 'react-native'
import { withNavigation } from 'react-navigation'
class ButtonName extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
return (
<TouchableOpacity
onPress={() => this.props.navigation.navigate('PageName')}
>
</TouchableOpacity>
)
}
}
export default withNavigation(ButtonName);
我正在使用子“行”和“按钮”组件动态构建我的“屏幕”。我只使用这种方法是因为我找不到可用于 react-native 的 flex-flow 属性。
所以基本上我通过数组的数组进行映射以构建每一行,并在行内通过每个数组进行映射以构建每个按钮。因为需要在按钮中设置 onPress,所以我为每个传递了 URL
onPress{() => this.props.navigation.navigate({navigationURL})
作为道具,先到行,再到按钮。问题是我不断收到错误 'Cannot read property 'navigation' of undefined
。我确定这是因为只有导航器中的实际“屏幕”才能访问导航道具。我也试过通过
navigation={this.props.navigation}
但没有成功。我查看了所有文档,但似乎找不到任何有用的信息。还有人遇到过类似情况吗?
如果您想从不属于 navigator
的组件访问 navigation
对象,则将该组件包装在 withNavigation
HOC 中。在包装的组件中,您可以使用 this.props.navigation
访问导航。看看 official document
示例
import { withNavigation } from 'react-navigation';
...
class CustomButton extends React.Component {
render() {
return <Button title="Back" onPress={() => {
this.props.navigation.goBack() }} />;
}
}
export default withNavigation(CustomButton);
希望这会有所帮助!
啊哈,愚蠢的错误。我没有在构造函数中设置道具。感谢 Prasun Pal 的帮助!如果其他人有问题,这是我的代码。
import React, { Component } from 'react'
import { Image, Text, TouchableOpacity, View } from 'react-native'
import { withNavigation } from 'react-navigation'
class ButtonName extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
return (
<TouchableOpacity
onPress={() => this.props.navigation.navigate('PageName')}
>
</TouchableOpacity>
)
}
}
export default withNavigation(ButtonName);