React Native鸿蒙开发实战(二):基础组件与Flex布局 - 青青子衿-

news/2025/12/17 13:45:33/文章来源:https://www.cnblogs.com/zq18/p/19354347

React Native鸿蒙开发实战(二):基础组件与Flex布局

一、核心基础组件详解

React Native在鸿蒙平台上提供了与Web开发类似的基础组件体系,这些组件是构建界面的基本元素。

1.1 View组件 - 布局容器

View组件是React Native中最基础的容器组件,相当于HTML中的div元素。它支持Flexbox布局,可以包裹其他组件并设置样式。

import { View, Text } from 'react-native';const MyView = () => (<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}><Text>Hello, World!</Text></View>
);

关键属性

  • flex:定义组件在容器中的弹性比例
  • justifyContent:主轴对齐方式(flex-start、center、flex-end、space-between、space-around)
  • alignItems:交叉轴对齐方式
  • backgroundColor:背景颜色

1.2 Text组件 - 文本显示

Text组件用于显示文本内容,支持样式设置和嵌套。

import { Text } from 'react-native';const MyText = () => (<Text style={{ fontSize: 16, color: '#333', fontWeight: 'bold' }}>Welcome to React Native!</Text>
);

常用样式属性

  • fontSize:字体大小
  • color:字体颜色
  • fontWeight:字体粗细
  • textAlign:文本对齐方式

1.3 Image组件 - 图片显示

Image组件用于显示本地或网络图片,支持多种图片格式。

import { Image } from 'react-native';// 本地图片
<Image source={require('./images/icon.png')} style={{ width: 100, height: 100 }} />// 网络图片
<Image source={{ uri: 'https://example.com/image.png' }} style={{ width: 200, height: 200 }} />

关键属性

  • source:图片资源路径
  • resizeMode:图片缩放模式(cover、contain、stretch等)
  • onLoad:图片加载完成回调

二、Flex布局在鸿蒙平台的适配

2.1 Flex布局基础

React Native使用Flexbox布局模型,与CSS Flexbox类似但存在一些差异。在鸿蒙平台上,Flex布局的默认行为与Android/iOS有所不同。

const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'row', // 主轴方向:row(水平)或column(垂直)justifyContent: 'space-between', // 主轴对齐alignItems: 'center', // 交叉轴对齐padding: 16,},
});

鸿蒙平台差异

  • 默认flexDirectioncolumn(垂直排列)
  • 百分比宽度(width: '50%')在低版本鸿蒙上可能失效
  • justifyContent: 'space-between'在某些场景下需要特殊处理

2.2 常用布局模式

水平居中布局

<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' 
}}><Text>居中内容</Text>
</View>

等分布局

<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}><View style={{ width: '30%', height: 50, backgroundColor: 'red' }} /><View style={{ width: '30%', height: 50, backgroundColor: 'green' }} /><View style={{ width: '30%', height: 50, backgroundColor: 'blue' }} />
</View>

响应式布局

import { Dimensions } from 'react-native';const { width } = Dimensions.get('window');<View style={{ width: width * 0.8, height: 200 }}>{/* 内容 */}
</View>

三、样式系统与单位换算

3.1 StyleSheet样式系统

React Native使用StyleSheet.create创建样式对象,这种方式有性能优化优势。

import { StyleSheet } from 'react-native';const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#F5FCFF',padding: 20,},title: {fontSize: 20,fontWeight: 'bold',textAlign: 'center',marginBottom: 20,},
});// 使用样式
<View style={styles.container}><Text style={styles.title}>标题</Text>
</View>

优势

  • 提前验证样式合法性,避免运行时错误
  • 样式可复用,减少重复代码
  • 性能优化:样式对象会被缓存

3.2 像素单位换算

在鸿蒙平台上,推荐使用绝对单位(px)而非百分比,避免布局错乱问题。

import { PixelRatio } from 'react-native';// dp转px
const dp2px = (dp) => PixelRatio.getPixelSizeForLayoutSize(dp);// px转dp
const px2dp = (px) => PixelRatio.roundToNearestPixel(px);// 使用示例
<View style={{ width: dp2px(100), height: dp2px(100) }} />

鸿蒙单位系统

  • px:物理像素单位
  • vp:屏幕密度相关像素(类似Android的dp)
  • fp:字体像素(类似Android的sp)
  • lpx:视窗逻辑像素单位

适配建议

  • 使用Dimensions.get('window')获取屏幕尺寸
  • 避免使用百分比布局,改用绝对单位计算
  • 针对不同设备尺寸设置断点

四、实战案例:新闻卡片布局

import React from 'react';
import { View, Text, Image, StyleSheet, Dimensions } from 'react-native';const { width } = Dimensions.get('window');const NewsCard = ({ title, summary, imageUrl, date }) => {return (<View style={styles.card}><Image source={{ uri: imageUrl }} style={styles.image} resizeMode="cover"/><View style={styles.content}><Text style={styles.title} numberOfLines={2}>{title}</Text><Text style={styles.summary} numberOfLines={3}>{summary}</Text><Text style={styles.date}>{date}</Text></View></View>);
};const styles = StyleSheet.create({card: {width: width - 32,backgroundColor: '#fff',borderRadius: 8,marginBottom: 16,marginHorizontal: 16,shadowColor: '#000',shadowOffset: { width: 0, height: 2 },shadowOpacity: 0.1,shadowRadius: 4,elevation: 3,},image: {width: '100%',height: 200,borderTopLeftRadius: 8,borderTopRightRadius: 8,},content: {padding: 16,},title: {fontSize: 18,fontWeight: 'bold',marginBottom: 8,color: '#333',},summary: {fontSize: 14,color: '#666',lineHeight: 20,marginBottom: 12,},date: {fontSize: 12,color: '#999',},
});export default NewsCard;

五、总结

通过本章学习,我们掌握了React Native在鸿蒙平台上的基础组件使用和Flex布局适配。核心要点

  1. 组件基础:View、Text、Image是构建界面的三大核心组件
  2. 布局适配:鸿蒙平台Flex布局存在差异,建议使用绝对单位替代百分比
  3. 样式系统:使用StyleSheet.create提升性能,注意单位换算
  4. 最佳实践:采用响应式设计,针对不同设备尺寸做适配

避坑指南

  • 避免在低版本鸿蒙上使用justifyContent: 'space-between'
  • 图片加载使用onLoadonError处理加载状态
  • 复杂列表使用FlatListHarmonyList替代ScrollView

下一章我们将深入讲解状态管理与数据流,学习如何在React Native中管理应用状态和数据通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1020423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘R Shiny文件上传黑科技:如何同时处理CSV、Excel、图像与JSON?

第一章&#xff1a;R Shiny 的多模态数据导入组件 在构建交互式数据应用时&#xff0c;R Shiny 提供了强大的多模态数据导入能力&#xff0c;支持从本地文件、数据库、API 接口等多种来源加载数据。通过合理设计输入控件与后端逻辑&#xff0c;用户可以灵活地上传和解析不同格式…

揭秘医疗系统PHP数据备份难题:3步实现安全可靠备份

第一章&#xff1a;医疗系统PHP数据备份的现状与挑战在现代医疗信息化进程中&#xff0c;PHP作为后端开发的重要语言之一&#xff0c;广泛应用于医院管理系统、电子病历平台和远程诊疗系统。然而&#xff0c;这些系统中存储着大量敏感患者数据和关键业务信息&#xff0c;数据丢…

Burst Compiler 优化技巧曝光,提升 DOTS 性能的 7 个关键点

第一章&#xff1a;Burst Compiler 与 DOTS 性能优化概述Unity 的高性能计算解决方案 DOTS&#xff08;Data-Oriented Technology Stack&#xff09;结合 Burst Compiler&#xff0c;为游戏和仿真应用带来了显著的运行时性能提升。Burst Compiler 是一个基于 LLVM 的高级编译器…

NVIDIA GeForce GTX 1060 支持4K吗

https://github.com/godmaybelieve

Dify智能体平台条件分支调用Qwen-Image场景设计

Dify智能体平台条件分支调用Qwen-Image场景设计 在内容创作日益智能化的今天&#xff0c;企业对AIGC系统的期待早已不止于“能生成图像”这么简单。真正的挑战在于&#xff1a;如何让系统聪明地决定什么时候该生成图像&#xff0c;并且一旦触发&#xff0c;就能输出符合专业标准…

BEATOZ在香港独立非执行董事协会年度大会上提出Web3与AI治理解决方案

— 以「分论坛赞助商」身份参会&#xff0c;向香港金融监管机构及上市公司高管验证技术实力【图片说明&#xff1a;Beatoz DX 事业本部负责人发表主题演讲后&#xff0c;与会嘉宾围绕 Web3 与 AI 风险治理展开专题讨论。】区块链专业企业 BEATOZ于12日表示&#xff0c;公司以分…

免训练开放词汇分割范式突破!将 SAM 3 零微调适配遥感图像分析领域,17个数据集上刷新SOTA

超高分辨率的遥感图像上的分割结果&#xff0c;原文链接&#xff1a;SAM3遥感https://mp.weixin.qq.com/s/2Dq2vhtPjdfGcGbgnvlDag 在之前谈到开放词汇分割方案时&#xff0c;必然离不开免训练的 CLIP 派系和 SAM 辅助派系两大类&#xff0c;但前者在精确定位方面常常面临挑战…

React Native鸿蒙开发实战(一):环境搭建与第一个应用 - 青青子衿-

React Native鸿蒙开发实战(一):环境搭建与第一个应用 一、开发环境准备 在开始React Native鸿蒙开发之前,需要先配置好基础开发环境。以下是必需的软件和工具: 1.1 核心工具安装 Node.js:推荐使用Node.js 18+ LTS版…

【紧急预警】医疗信息系统即将强制升级?PHP开发者必知的6项新合规要求

第一章&#xff1a;医疗信息系统合规升级的紧迫性在数字化转型加速的背景下&#xff0c;医疗信息系统&#xff08;HIS&#xff09;正面临前所未有的合规挑战。随着《个人信息保护法》《数据安全法》及《医疗卫生机构网络安全管理办法》等法规的相继实施&#xff0c;医疗机构必须…

CBAM不是合规问题,是企业未来三年“还能不能接欧盟订单”的问题

一、为什么我说&#xff1a;CBAM已经不是“要不要做”的问题了这两年&#xff0c;很多工厂老板对 CBAM 的态度&#xff0c;基本分三类&#xff1a;• 第一类&#xff1a;听说过&#xff0c;但没时间细看• 第二类&#xff1a;知道重要&#xff0c;但觉得还没到时候• 第三类&am…

泛型实例化陷阱频发?资深架构师总结的6大避坑法则

第一章&#xff1a;泛型的实例化泛型的实例化是编程语言中实现类型安全与代码复用的关键机制。通过泛型&#xff0c;开发者可以在不指定具体类型的前提下编写函数、类或接口&#xff0c;并在使用时传入实际类型参数&#xff0c;从而生成特定类型的实例。这种延迟类型绑定的设计…

揭秘Rust与PHP扩展兼容性难题:5个关键步骤实现无缝版本对接

第一章&#xff1a;Rust与PHP扩展兼容性概述Rust 作为一种系统级编程语言&#xff0c;以其内存安全和并发性能优势&#xff0c;正逐步被用于构建高性能的 PHP 扩展。通过将计算密集型任务交由 Rust 实现&#xff0c;开发者可以在不牺牲 PHP 快速开发特性的前提下&#xff0c;显…

Keithley 6517B 静电计在太空实验中的应用

太空环境极其复杂&#xff0c;充满各种高能粒子、电磁辐射和等离子体。准确测量和研究这些因素对于深入理解空间环境、保障航天器安全以及开展空间科学研究至关重要。Keithley 6517B 静电计以其卓越的性能&#xff0c;被广泛应用于各类太空实验中&#xff0c;为科学家们提供了可…

延迟渲染中的阴影难题,如何在复杂场景下保持144FPS不掉帧?

第一章&#xff1a;延迟渲染中的阴影难题&#xff0c;如何在复杂场景下保持144FPS不掉帧&#xff1f;在高帧率游戏和实时渲染应用中&#xff0c;延迟渲染&#xff08;Deferred Rendering&#xff09;因其高效的光照处理能力被广泛采用。然而&#xff0c;当引入动态阴影时&#…

第16篇:CreamFL《Multimodal Federated Learning via Contrastive Representation Ensemble》多模态联邦学习

第一部分:收录基本信息 - 论文标题:MULTIMODAL FEDERATED LEARNING VIA CONTRASTIVE REPRESENTATION ENSEMBLE(基于对比表征集成的多模态联邦学习) - 收录会议:ICLR 2023(国际表征学习会议,顶会) - 发布版本:arXiv:2302.08888v3 [cs.LG],2023年5月6日 - 作者及单…

【Laravel 13重大更新揭秘】:多模态数据校验如何重构你的验证逻辑?

第一章&#xff1a;Laravel 13 多模态数据校验概述随着现代 Web 应用对数据输入来源的多样化&#xff0c;单一类型的数据验证已无法满足复杂业务场景的需求。Laravel 13 引入了多模态数据校验机制&#xff0c;支持同时处理表单数据、JSON 载荷、文件上传及查询参数的联合校验&a…

Ollama本地缓存机制对PyTorch模型加载速度的影响

Ollama本地缓存机制对PyTorch模型加载速度的影响 在现代AI开发中&#xff0c;一个看似不起眼的环节——模型加载时间&#xff0c;往往成为拖慢整个迭代流程的关键瓶颈。尤其是在本地调试或边缘部署场景下&#xff0c;每次启动都要花几分钟从远程拉取数GB的大模型&#xff0c;这…

Laravel 13多模态事件监听实战:如何实现高响应性应用架构?

第一章&#xff1a;Laravel 13多模态事件监听概述Laravel 13 引入了对多模态事件监听的增强支持&#xff0c;允许开发者在单一事件触发时&#xff0c;响应多种类型的动作或通知形式&#xff0c;如邮件、短信、WebSocket 推送和日志记录等。这一机制提升了系统的解耦程度与扩展能…

pwnable.kr记录

fd linux fd是一个非负索引值,是文件描述符,打开一个文件时候内核给进程一个文件描述符。后续read write时候只需要提供这个fd。 fd为0是标准输入STDIN_FILENO,1是标准输出STDOIT_FILENO,2是标准错误STDERR_FILENO …

zookeeper基础概念及集群部署

目录 前言&#xff1a; 一.Zookeeper 概述 二.Zookeeper 工作机制 三.Zookeeper 特点 四.Zookeeper 数据结构 五.Zookeeper 应用场景 六.zookeeper选举机制 1.第一次启动选举机制 2.非第一次启动选举机制 七.部署 Zookeeper 集群 1.部署环境ZK 2.安装前准备 3.安装…