当前位置: 首页 > news >正文

【React Native】布局文件-顶部导航栏

配置导航栏标题

希望顶部的标题,就显示成首页,而不要显示成index

<Stack . Screen options={{ title: "首页" }} />

但一定记住,需要同时又 _layout.js 的中 Stack 的支持才可以生效。

同时传参为:

    <View style={styles.container}><Stack.Screen options={{ title: "首页" }} /><Text style={styles.title}>这里是首页</Text><Link style={styles.link} href="/courses/1?title=Node.js">跳转传参(Link)</Link><Linkstyle={styles.link}href={{pathname: "/courses/[id]",params: { id: 2, title: "React Native" },}}>跳转传参(Link 使用 params)</Link><TouchableOpacityonPress={() => router.navigate("/courses/3?title=Vue.js")}><Text style={styles.buttonText}>跳转传参(navigate )</Text></TouchableOpacity><TouchableOpacityonPress={() =>router.navigate({pathname: "/courses/[id]",params: { id: 4, title: "微信小程序" },})}><Text style={styles.buttonText}>跳转传参(navigate 使用 params )</Text></TouchableOpacity></View>
export default function Course() {const { id, title } = useLocalSearchParams();return (<View style={styles.container}><Stack.Screen options={{ title: title }}/>// ...</View>);
}

也可以使用 router 设置 params:

export default function Course() {const router = useRouter();//...return (<View style={styles.container}>// ...<TouchableOpacity onPress={() => router.setParams({ title: 'params被修改了!' })}><Text style={styles.buttonText}>修改params</Text></TouchableOpacity></View>);
}

布局文件-顶部导航栏

统一配置导航栏样式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是现在这个样式只是在首页才有,如果切换到其他页面就没有了。所以我们可以将这些公共的样式header放入到布局文件 _layout.js 中。

import { Stack } from 'expo-router';export default function Layout() {return (<StackscreenOptions={{headerTitleAlign: 'center',     // 安卓标题栏居中animation: 'slide_from_right',  // 安卓使用左右切屏headerStyle: {                  // 导航栏整体样式backgroundColor: '#e29447'},headerTintColor: '#fff',        // 导航栏中文字、按钮、图标的颜色headerTitleStyle: {             // 导航栏标题样式fontWeight: 'bold',},}}><Stack.Screen name="index" options={{ title: '首页' }} /><Stack.Screenname="courses/[id]"options={({ route }) => ({title: route.params?.title || '课程页', // 使用 params 中的 title,如果没有则显示默认值})}/></Stack>);
}
  • name的值就和首页文件的路径对应。
  • 因为首页文件和布局文件同级,所以直接写index就行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置自定义导航栏

_layout.js

import { Link, Stack } from 'expo-router';
import { Image, StyleSheet, TouchableOpacity } from 'react-native'
import SimpleLineIcons from '@expo/vector-icons/SimpleLineIcons';/*** 导航栏 Logo 组件*/
function LogoTitle() {return <Image style={style.logo} contentFit="contain" source={require('../assets/logo-light.png')}/>
}/*** 导航栏按钮组件* @param props*/
function HeaderButton({ href, ...rest }) {return (<Link href={href} asChild><TouchableOpacity><SimpleLineIcons size={20} color="#1f99b0" {...rest} /></TouchableOpacity></Link>)
}export default function Layout() {return (<StackscreenOptions={{title: '',                      // 默认标题为空headerTitleAlign: 'center',     // 安卓标题栏居中animation: 'slide_from_right',  // 安卓使用左右切屏headerTintColor: '#1f99b0',     // 导航栏中文字、按钮、图标的颜色headerTitleStyle: {             // 标题组件的样式fontWeight: '400',color: '#2A2929',fontSize: 16,},headerBackButtonDisplayMode: 'minimal', // 设置返回按钮只显示箭头,不显示文字}}><Stack.Screenname="index"options={{headerTitle: props => <LogoTitle {...props} />,headerLeft: () => <HeaderButton name="bell" href="/articles" style={style.headerLeft} />,headerRight: () => (<><HeaderButton name="magnifier" href="/search" style={style.headerRight} /><HeaderButton name="options" href="/settings" style={style.headerRight} /></>),}}/><Stack.Screenname="courses/[id]"options={({ route }) => ({title: route.params?.title || '课程页', // 使用 params 中的 title,如果没有则显示默认值})}/></Stack>);
}const style = StyleSheet.create({logo: {width: 130,height: 30,},headerLeft: {marginLeft: 15,},headerRight: {marginRight: 15,},
});

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://www.lryc.cn/news/590229.html

相关文章:

  • 从零开始学习 Redux:React Native 项目中的状态管理
  • 3D TOF 安全防护传感器
  • Ubuntu 上 GBase 8s 实例重启与字符集踩坑实录
  • 在UE中如何给骨骼网格体赋予动画
  • conda activate 时报错: CondaError: Run ‘conda init‘ before ‘conda activate‘
  • React Native 在 Web 前端跨平台开发中的优势与实践
  • Django ORM 查询工具对象详解
  • 基于WebRTC技术实现一个在线课堂系统
  • 线上分享:解码eVTOL安全基因,构建安全飞行生态
  • 主机安全---开源wazuh安装
  • 前端面试题(React 与 Vue)
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • [时序数据库-iotdb]时序数据库iotdb的安装部署
  • C++11 std::uninitialized_copy_n 原理与实现
  • 边缘计算革命:AWS Snowcone在智慧工厂的落地实践(2025工业4.0实战指南)
  • Jenkins+Docker(docker-compose、Dockerfile)+Gitee实现自动化部署
  • 【时序数据库-iotdb】时序数据库iotdb的可视化客户端安装部署--dbeaver
  • Datawhale AI夏令营笔记-TF-IDF方法
  • 玩转Docker | 使用Docker部署vnStat网络流量监控服务
  • java之-文件预览终极解决方案
  • java工具类Hutool
  • 深度剖析C++生态系统:一门老牌语言如何在开源浪潮中焕发新生?
  • [Java安全】JDK 动态代理
  • 浅谈SQL注入注释符#和--+的运用场景和区别
  • rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
  • Hadoop(三)
  • Django REST Framework 入门指南:从 0 到 1 实现 RESTful API
  • 汇编 Call 指令运行原理详解:从跳转机制到堆栈操作
  • 基于 elements3 包装的 可展开 table 组件
  • uniapp各端通过webview实现互相通信