react-native - React Native,通过带有 withNavigation 的组件发送列表
问题描述
我的问题比许多其他类似的问题有些独特:我想通过(功能)组件将一些列表传递到另一个屏幕。它不起作用。
App.js 有:
const switchNavigator = createSwitchNavigator({
locationAllFlow: createStackNavigator(
{
locationsFlow: createStackNavigator(
{
Locations: { screen: LocationsScreen },
Search: { screen: SearchScreen }
},
{
headerMode: 'none'
}
),
LocationDetail: LocationDetailScreen
},
{
headerMode: 'none'
}
),
...
然后 LocationsScreen 有:
<TitleBar
title='Locations'
hasSearch={true}
list={results.map(result => result.name)}
/>
并且 LocationsScreen 将 TitlBar 作为一个组件:
const TitleBar = ({ navigation, title, hasSearch, list }) => {
...
<TouchableOpacity
style={{ padding: 8, position: 'absolute', right: 4 }}
onPress={() => {
console.log('inside onPress: ', list);
navigation.navigate('Search', { list });
}}
>
<MaterialIcons style={styles.titleIcon} name='search' />
</TouchableOpacity>
...
export default withNavigation(TitleBar);
最后,需要进入 SearchScreen:
const SearchScreen = ({ list }) => {
console.log('SearchScreen: list.length: ', list);
return (
<View style={{ backgroundColor: 'rgb(15, 104, 186)', flex: 1 }}>
<SafeAreaView>
<FlatList
data={list}
keyExtractor={item => item}
renderItem={({ item }) => (
<TouchableOpacity>
<Text>item</Text>
</TouchableOpacity>
)}
/>
</SafeAreaView>
</View>
);
};
SearchScreen 中出现问题:尽管inside onPress:
prints list 非常好,但不知何故,SearchScreen: list.length:
prints undefined
。为什么?
解决方案
list
不会作为参数传递给 SearchScreen。你应该navigation.getParam(paramID, defaultValue)
改用
推荐阅读
- asp.net - 纯 ASP.NET Core 身份服务器
- python-3.x - 如何在 IDLE 中清除 Python 中的 shell?CTRL+L、os.system('cls') 和 sp.call('cls',shell=True) 不起作用
- python - Pandas 独立对多列进行排序
- python-3.x - AWS Lambda 中显示“导入错误 lxml”
- haskell - 如何跨函数调用链携带值
- php - 我的错误消息在其左侧的错误消息下方格式化
- android - 无法从扩展 Runnable 并嵌套在布局中的自定义 SurfaceView 中找到公共方法
- javascript - 如何使用替换功能将标记标签连接到字符串中的单个单词?
- python - 拆分字典
- types - 函数参数中的 Julia 类型参数嵌套/范围