react-native - 将导航作为道具传递
问题描述
在 React Native 中,使用 时createStackNavigator
,如何navigate
作为道具传递?
在下面的示例中,
items
工作正常,但是navigate
当undefined
传递给MyList
.这意味着按下按钮会引发错误:
undefined is not a function(evaluating 'navigate('ItemDetails', { itemId: item.id })')
.我怎样才能传递
navigate
给MyList
?
export class MyScreen extends React.Component {
render() {
const { items } = this.props;
const { navigate } = this.props.navigation;
console.log(navigate); // this logs [Function anonymous] :)
return (
<View>
<MyList items={items} navigate={navigate} />
</View>
);
}
}
const MyList = ( { items }, { navigate } ) => {
console.log(navigate); // this logs undefined :(
return (
<ScrollView>{
items && items.map( item =>
<View key={item.id}>
<TouchableOpacity onPress={ () =>
navigate( 'ItemDetails', { itemId: item.id } )
}>
<Text>Go</Text>
</TouchableOpacity>
</View>
)}</ScrollView>
)}
PS:如果我将所有代码MyList
直接移到MyScreen
中,它会正常工作。
解决方案
您应该将MyList
声明更改为
const MyList = ( { items, navigate } ) => {...}
由于,MyList
是一个功能组件,传递给它的任何道具都将作为第一个参数可用。我只是使用对象解构从该对象获取所需的属性。
navigate
除了作为 props传入之外MyList
,您还可以使用包装组件,请查看此处withNavigation
的文档。如果您使用 包装它,您可以直接从 访问导航器对象。withNavigation
props
希望这会有所帮助!
推荐阅读
- html - 如何制作像 Myntra 这样的导航或顶部搜索栏
- java - 启用事务后,kafka Producer 发送重复消息
- java - 对于参数类型布尔运算符,运算符 && 未定义。错误,我知道怎么了
- arrays - 二分搜索在展开的链表中查找 k 最小数
- arrays - 为什么这种选择排序算法不起作用?
- python - C# 应用程序未正确启动 python 可执行文件
- java - 我无法将我的 java 代码 (JDBC) 连接到 Postgress
- python - 制作强数程序时的最大递归部门错误
- c++ - C++ 应用程序使用的 RAM 溢出
- python - 接收以太网多播 (IPv4_mcast_00) 消息的代码片段严重失败