news 2026/7/7 20:58:20

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/7 19:28:41

8、掌握Shell扩展、引用与高级键盘技巧

掌握Shell扩展、引用与高级键盘技巧 1. 目录组织与扩展 在处理大量照片时,我们需要将照片按年月进行整理。创建按 “Year - Month” 格式命名的目录是个好办法,这样目录名会按时间顺序排列。手动输入所有目录名既繁琐又容易出错,我们可以使用以下命令: [me@linuxbox ~]…

作者头像 李华
网站建设 2026/7/7 19:11:58

Horovod分布式训练终极指南:突破千亿参数模型并行技术

Horovod分布式训练终极指南&#xff1a;突破千亿参数模型并行技术 【免费下载链接】horovod Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet. 项目地址: https://gitcode.com/gh_mirrors/ho/horovod 在当今AI大模型时代&#xff0c;…

作者头像 李华
网站建设 2026/7/6 23:38:24

LightRAG技术解析:从理论到实践的3大突破性功能

LightRAG技术解析&#xff1a;从理论到实践的3大突破性功能 【免费下载链接】LightRAG "LightRAG: Simple and Fast Retrieval-Augmented Generation" 项目地址: https://gitcode.com/GitHub_Trending/li/LightRAG 在RAG&#xff08;检索增强生成&#xff09;…

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

HeyGem.ai技术革新:跨平台数字人创作系统深度解析

系统架构突破&#xff1a;多环境部署方案 【免费下载链接】HeyGem.ai 项目地址: https://gitcode.com/GitHub_Trending/he/HeyGem.ai 在最新的技术迭代中&#xff0c;HeyGem.ai实现了从单一平台到多系统适配的重要跨越。该项目现已完成对Ubuntu 22.04 Desktop&#xff…

作者头像 李华
网站建设 2026/7/6 17:09:43

【MySQL优化】扔掉ORDER BY RAND()!随机推荐的性能提升方案

背景与需求分析在电商平台开发中&#xff0c;我们经常需要实现“随机推荐”功能&#xff1a;从商品库中随机选取指定数量的商品展示给用户。假设商品表&#xff08;product&#xff09;有10000条数据&#xff0c;需要随机获取3个不重复的商品。许多开发者第一反应是使用 ORDER …

作者头像 李华
网站建设 2026/7/6 18:11:33

C语言数据库内核开发终极指南:揭秘性能优化的核心密码

还在纠结数据库内核开发的技术选型吗&#xff1f;&#x1f914; 面对琳琅满目的编程语言&#xff0c;为什么像db_tutorial这样的专业项目偏偏选择了"古老"的C语言&#xff1f;今天我们就来深度解析数据库内核开发的技术选型之道&#xff0c;让你掌握底层开发的关键决…

作者头像 李华