React native React Native,使用withNavigation通过组件发送列表
我的问题比许多其他类似的问题有点独特:我想通过(功能)组件将一些列表传递到另一个屏幕。它不起作用 App.js有:React native React Native,使用withNavigation通过组件发送列表,react-native,React Native,我的问题比许多其他类似的问题有点独特:我想通过(功能)组件将一些列表传递到另一个屏幕。它不起作用 App.js有: const switchNavigator = createSwitchNavigator({ locationAllFlow: createStackNavigator( { locationsFlow: createStackNavigator( { Loca
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)}
/>
result.name)}
/>
而LocationsScreen将标题栏作为组件:
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);
const TitleBar=({navigation,title,hasearch,list})=>{
...
{
log('insideonpress:',list);
navigation.navigate('Search',{list});
}}
>
...
使用导航导出默认值(标题栏);
最后,需要转到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>
);
};
const SearchScreen=({list})=>{
log('SearchScreen:list.length:',list);
返回(
项目}
renderItem={({item})=>(
项目
)}
/>
);
};
搜索屏幕中出现了问题:尽管
内部onPress:
很好地打印列表,但不知何故,搜索屏幕:列表。长度:
打印未定义的
。为什么?列表将不会作为参数传递给SearchScreen。您应该改用navigation.getParam(paramID,defaultValue)
文档参考:列表
不会作为参数传递给SearchScreen。您应该改用navigation.getParam(paramID,defaultValue)
文档参考:您确定您的导航没有未定义吗?执行此操作时,const TitleBar=({navigation,title,hasearch,list})=>{
同样在react-navigation
的情况下,我发现我在这里某处传递的对象this.props.navigation.state.params
,控制台.log
这些道具,看看你是否真的收到了它们。好吧,导航
工作正常,因为它进入了搜索屏幕,至少.props.navigation.state.params有list
。哦,是的,Vincius是对的。我忘了SearchScreen
不是嵌套组件,所以需要使用getParam()
你确定你的navigation
没有未定义吗?当你这样做时const TitleBar=({navigation,title,Hasearch,list})=>{
同样在react-navigation
的情况下,我发现我在这里某处传递的对象this.props.navigation.state.params
,控制台.log
这些道具,看看你是否真的收到了它们。好吧,导航
工作正常,因为它进入了搜索屏幕,至少.props.navigation.state.params有list
。哦,是的,Vincius是对的。我忘了SearchScreen
不是嵌套组件,所以需要使用getParam()