You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Stack Navigation:详情页头部如何使用导航参数

解决React Navigation自定义Header无法获取导航参数的问题

问题核心是自定义Header组件未接收到当前页面的导航上下文与参数,以下是具体修改方案:

1. 修改homeStack.js传递导航参数给Header

在ImageDetails的navigationOptions中,接收navigation和route参数,并将其传递给自定义Header组件:

const screens = {
    Home: {
        screen: Home,
        navigationOptions:{ headerShown: false}
        
    },
    ImageDetails: {
        screen: ImageDetails,
        navigationOptions: ({ navigation, route }) => {
            return{
                 headerTitle: () => <Header navigation={navigation} route={route}/>,
            }
        }
    }
}

const HomeStack = createStackNavigator(screens);

export default createAppContainer(HomeStack);

2. 修改Header.js获取参数

通过传入的route对象直接读取参数,用可选链或默认值避免参数未定义时报错:

export default function Header({ route }) {
    const { url, explanation } = route.params || {};
    return(
       <View style={styles.descriptionBox}>
            <Text style={styles.imageDet}>图片URL:{url || '未获取到URL'}</Text>
            <Text style={styles.imageDet}>描述:{explanation || '未获取到描述'}</Text>
       </View>
    )
}

可选优化:规范跳转传参写法

在Home.js的跳转逻辑中,明确传递所需参数(可读性更强):

<TouchableOpacity onPress={() => navigation.navigate('ImageDetails', { url: item.url, explanation: item.explanation })}>
    <Image 
        style={{height: 104}} 
        source={{uri:item.url}}
    />
</TouchableOpacity>

原理说明

之前的代码中,navigationOptions的回调函数未将当前页面的导航实例和路由信息传递给Header,导致Header内的navigation对象未定义,无法读取params。修改后通过传递navigation和route,Header就能正常访问跳转时传入的参数。

内容的提问来源于stack exchange,提问作者user20029377

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:30:57