React native React Native,使用withNavigation通过组件发送列表

React native React Native,使用withNavigation通过组件发送列表,react-native,React Native,我的问题比许多其他类似的问题有点独特:我想通过(功能)组件将一些列表传递到另一个屏幕。它不起作用 App.js有: const switchNavigator = createSwitchNavigator({ locationAllFlow: createStackNavigator( { locationsFlow: createStackNavigator( { Loca

我的问题比许多其他类似的问题有点独特:我想通过(功能)组件将一些列表传递到另一个屏幕。它不起作用

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)}
/>
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()