news 2026/7/11 12:14:51

React Native入门详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React Native入门详解

一、React Native是什么?

简单来说,React Native是一个让你用JavaScript和React编写真正原生移动应用的框架。

React Native 的三种身份,用大白话说就是:

  1. 它不是网页套壳(不像 Cordova 在 App 里内嵌一个浏览器来跑你的代码)
  2. 它不转译代码(不会把你的 JS 代码变成 Java 或Swift 代码)
  3. 它是“传话员”(你的 JavaScript 通过它“告诉”手机原生系统要画什么界面)

用个形象的比喻:传统混合应用像是“在浏览器中运行网页然后打包成App”,而React Native则是“用JavaScript操作原生组件搭建真正的本地程序”。

二、为什么需要React Native?

在React Native出现之前,移动开发者面临三大困境:

1. 人力成本翻倍

开发一个应用需要:

  • iOS团队:Swift/Objective-C + Xcode
  • Android团队:Java/Kotlin + Android Studio
  • 结果:两套代码、两个团队、双倍时间和成本

2. 体验与效率的权衡

  • 纯原生:体验最好,但效率最低
  • 混合应用(H5):一次编写,体验打折扣
  • 跨平台(如Flutter):较新,生态有待完善

3. 技术栈分裂

Web开发者难以进入移动领域,移动开发者难以共享Web生态

React Native的解决方案:让Web开发者用已有技能进入移动开发,同时保持接近原生的性能。

三、核心原理

理解React Native的工作原理,能帮你更好地使用它:

JavaScript代码 → React Native桥 → 原生组件 ↑ ↓ 状态更新 ← 消息传递 → 原生事件

关键机制:

  1. 三个线程模型

    • JavaScript线程:运行你的业务逻辑
    • 原生UI线程:处理UI渲染
    • 影子线程:计算布局(在后台)
  2. 异步通信:JS和原生通过异步JSON消息通信,避免阻塞

  3. 虚拟DOM差异更新:React的虚拟DOM机制在这里同样适用,只更新变化的部分

四、快速上手

首先确保安装了Node.js,然后:

# 安装React Native命令行工具npminstall-g react-native-cli# 创建新项目npx react-native init MyFirstApp# 运行iOS应用(需要Mac和Xcode)cdMyFirstApp&&npx react-native run-ios# 运行Android应用(需要Android Studio)npx react-native run-android

现在看看自动生成的App.js

importReactfrom'react';import{View,Text,StyleSheet}from'react-native';// 这和React组件语法几乎一样constApp=()=>{return(<View style={styles.container}><Text style={styles.text}>Hello,React Native!</Text></View>);};// 样式采用类似CSS的写法,但用的是JavaScript对象conststyles=StyleSheet.create({container:{flex:1,justifyContent:'center',alignItems:'center',backgroundColor:'#F5FCFF',},text:{fontSize:20,textAlign:'center',margin:10,},});exportdefaultApp;

在RN中,我们用<View>代替了<div>,用<Text>代替了<span>。这是因为移动端没有div和span这些Web概念。

五、RN语法详解

1. 组件差异对照表

Web (React)React Native说明
<div><View>容器组件,类似div
<span>/<p><Text>所有文本必须放在Text组件内
<img><Image>图片组件,用法略有不同
<input><TextInput>文本输入框
CSS样式StyleSheet对象样式写在JavaScript中

2. 样式编写:

import{StyleSheet}from'react-native';conststyles=StyleSheet.create({container:{flex:1,// 类似 flex: 1flexDirection:'row',// 类似 flex-direction: rowjustifyContent:'center',// 类似 justify-content: centerbackgroundColor:'#fff',// 背景色,注意是驼峰命名paddingHorizontal:10,// 左右内边距,Web中要写paddingLeft和paddingRight},title:{fontSize:18,// 字号,没有px单位!fontWeight:'bold',// 字重color:'#333',},});

重要区别

  • 没有单位:React Native中fontSize: 18就是18,不是18px
  • 少数属性名不同:如paddingHorizontal代替padding-leftpadding-right
  • 没有CSS选择器:样式直接绑定组件

3. 布局核心:Flexbox为主

如果你熟悉CSS Flexbox,那么RN的布局你会很好上手。很多布局需求都能用Flexbox解决。

<View style={{flex:1,flexDirection:'row'}}><View style={{width:50,height:50,backgroundColor:'red'}}/><View style={{flex:1,height:50,backgroundColor:'blue'}}/></View>

4. 处理用户交互

import{TouchableOpacity,Alert}from'react-native';constMyButton=()=>{consthandlePress=()=>{Alert.alert('提示','你点击了按钮!');};return(<TouchableOpacity onPress={handlePress}style={styles.button}><Text style={styles.buttonText}>点击我</Text></TouchableOpacity>);};

注意:RN中没有<button>,使用TouchableOpacityTouchableHighlightPressable

5. 列表渲染:FlatList和SectionList

对于长列表,不要用map渲染所有项目,使用RN优化的列表组件:

import{FlatList}from'react-native';constdata=[{id:'1',title:'第一条数据'},{id:'2',title:'第二条数据'},// ...更多数据];constMyList=()=>(<FlatList data={data}renderItem={({item})=><Text>{item.title}</Text>}keyExtractor={item=>item.id}/>);

六、原生模块:当JavaScript能力不够时

React Native的强大之处在于可以轻松调用原生功能:

// JavaScript端import{NativeModules}from'react-native';// 调用原生模块NativeModules.MyNativeModule.doSomething();// 更常见的是使用社区封装好的库importGeolocationfrom'@react-native-community/geolocation';// 获取当前位置Geolocation.getCurrentPosition(info=>console.log(info));

几乎所有原生功能都有对应的React Native库:相机、地理位置、推送通知、生物识别…

七、热重载

这是React Native受欢迎的重要原因之一:

  • 热重载(Hot Reloading):修改代码后立即看到变化,保持应用状态
  • 快速刷新(Fast Refresh):React Native 0.61+的默认功能,更稳定

不需要经历“编译-部署-启动”的漫长等待,保存文件就能看到更新!

八、使用场景

该用React Native的场景:

  1. 初创公司需要快速推出MVP
  2. 已有Web团队,想扩展到移动端
  3. 应用不需要大量复杂动画或特殊硬件功能
  4. 需要代码复用(可共享70-80%代码在iOS和Android间)

慎重考虑的场景:

  1. 游戏或需要复杂图形处理的应用
  2. 需要深度定制原生UI或性能极致的应用
  3. 严重依赖平台特定功能的app
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 1:49:18

深入理解现代摄像机聚焦与变焦系统:从光学原理到代码实现

前言 最近在做一个水下ROV的视觉系统&#xff0c;需要实现自动对焦和电动变焦功能。查了不少资料&#xff0c;发现网上讲这块的文章要么太理论化&#xff0c;要么代码不完整。干脆自己整理一篇&#xff0c;把光学原理和工程实现都讲清楚。 本文会从最基础的透镜成像讲起&#x…

作者头像 李华
网站建设 2026/7/11 8:30:49

WPF智能搜索革命:AutoSuggestBox如何重塑用户交互体验

WPF智能搜索革命&#xff1a;AutoSuggestBox如何重塑用户交互体验 【免费下载链接】wpfui WPF UI在您熟悉和喜爱的WPF框架中提供了流畅的体验。直观的设计、主题、导航和新的沉浸式控件。所有这些都是本地化且毫不费力的。 项目地址: https://gitcode.com/GitHub_Trending/wp…

作者头像 李华
网站建设 2026/7/10 8:58:27

8、复杂网络环境下的网络配置与管理

复杂网络环境下的网络配置与管理 1. 内部服务器的NAT配置 在某些情况下,外部可见地址不可用或成本过高,且在主要作为防火墙的机器上运行多个服务不是理想选择,此时需在网关进行NAT配置。以一个包含邮件服务器、Web服务器和文件服务器的网络为例,网络规格要求运行以明文(h…

作者头像 李华
网站建设 2026/7/10 8:58:28

13、网络队列、整形、冗余及日志监控统计全解析

网络队列、整形、冗余及日志监控统计全解析 1. CARP 接口配置与安全加固 在备份节点上,可使用 ifconfig 命令检查每个 CARP 接口是否配置正确。示例如下: $ ifconfig carp0 carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500lladdr 00:00:5e…

作者头像 李华
网站建设 2026/7/11 5:47:50

革命性架构突破:ERNIE-4.5多模态大模型重构视觉认知范式

革命性架构突破&#xff1a;ERNIE-4.5多模态大模型重构视觉认知范式 【免费下载链接】ERNIE-4.5-VL-28B-A3B-Base-Paddle 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-VL-28B-A3B-Base-Paddle 在人工智能多模态融合领域&#xff0c;一项颠覆性的技术…

作者头像 李华
网站建设 2026/7/10 13:01:08

16、优化网络配置与资源整合

优化网络配置与资源整合 1. 利用 tcpdump 监控网络流量 在网络管理中,tcpdump 是一个强大的工具。例如,我们可以使用它来监控 xl0 接口上的 TCP 流量,同时排除 SSH 和 SMTP 流量,并以非常详细的模式输出结果。操作步骤如下: $ sudo tcpdump -nvvvpi xl0 tcp and not p…

作者头像 李华