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

React Native中如何为页面头部添加自定义标题与右侧按钮?(解决route.params未定义错误)

解决React Navigation中自定义标题与右侧按钮的问题

嘿,我明白你遇到的问题了!你出错的核心原因是把options写成了普通对象,而不是一个能接收route参数的函数,而且headerTitle的写法也不对。咱们来一步步修正:

错误原因分析

你修改后的代码里,options是一个直接包含headerTitle和headerRight的对象,但headerTitle函数里的route是找不到的——因为route参数只有当options本身是一个函数时,才能被传递进来。原来的正确写法是把options设为函数来获取route,但你修改后改成了普通对象,自然就拿不到route.params了。

正确实现代码

下面是两种正确的写法,根据你的需求选一种就行:

写法1:直接用学生姓名作为标题

如果只是要显示学生姓名作为标题,直接把headerTitle设为route.params.name就好:

<Stack.Screen 
  name="Profile" 
  component={ProfileScreen} 
  options={({ route }) => ({
    // 直接从route参数里获取学生姓名作为标题
    headerTitle: route.params.name,
    // 添加右侧按钮
    headerRight: () => (
      <Button 
        onPress={() => alert('This is a button!')} 
        title="Info" 
        color="#fff" 
      />
    )
  })} 
/>

写法2:自定义标题组件(如果需要更复杂的标题样式)

如果你需要给标题加样式或者自定义渲染内容,可以把headerTitle写成一个组件函数:

<Stack.Screen 
  name="Profile" 
  component={ProfileScreen} 
  options={({ route }) => ({
    headerTitle: () => (
      // 这里可以自定义标题的样式,比如加大字号、改颜色
      <Text style={{ fontSize: 18, fontWeight: 'bold', color: '#fff' }}>
        {route.params.name}
      </Text>
    ),
    headerRight: () => (
      <Button 
        onPress={() => alert('This is a button!')} 
        title="Info" 
        color="#fff" 
      />
    )
  })} 
/>

额外建议:处理参数可能不存在的情况

为了避免如果route.params不小心没传导致的报错,可以加个默认值:

headerTitle: route.params?.name || '学生资料',

这样就既能正确显示学生姓名作为标题,又能在头部右侧添加按钮啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:22:47