news 2026/4/17 8:35:44

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/4/17 22:44:30

AppSmith零代码实战:3步搞定Web Push实时消息推送

AppSmith零代码实战&#xff1a;3步搞定Web Push实时消息推送 【免费下载链接】appsmith appsmithorg/appsmith: Appsmith 是一个开源的无代码开发平台&#xff0c;允许用户通过拖拽式界面构建企业级Web应用程序&#xff0c;无需编写任何后端代码&#xff0c;简化了软件开发流程…

作者头像 李华
网站建设 2026/4/17 13:18:46

蓝易云 - 服务器数据恢复-reiserfs文件系统损坏如何恢复数据?

下面给你一套 “先保全、再修复、后迁移” 的企业级 ReiserFS 损坏数据恢复打法&#xff0c;核心目标是把 二次破坏风险 降到最低&#xff0c;同时最大化可恢复率。&#x1f9ef; 关键背景&#xff1a;ReiserFS 已被逐步淘汰&#xff0c;甚至在较新的 Linux 内核版本里已被移除…

作者头像 李华
网站建设 2026/4/17 1:11:42

蓝易云 - 如何解决MySQL查询问题

下面给你一套“可落地、可复盘”的 MySQL 查询问题解决框架&#xff1a;无论你遇到的是 查询慢、结果不对、还是 锁等待/死锁&#xff0c;按这个顺序排查&#xff0c;基本不会走弯路。&#x1f642;1&#xff09;先定性&#xff1a;到底是哪一类“查询问题”现象高概率原因直接…

作者头像 李华
网站建设 2026/4/18 0:30:00

打造智能机器狗:openDogV2开源机器人开发全攻略

打造智能机器狗&#xff1a;openDogV2开源机器人开发全攻略 【免费下载链接】openDogV2 项目地址: https://gitcode.com/gh_mirrors/op/openDogV2 你是否梦想过亲手打造一台能够自主感知环境、智能决策的机器狗&#xff1f;openDogV2项目将这个梦想变成了现实&#xff…

作者头像 李华