【React Native入门系列文章 一】小白扫盲篇

鸿蒙开发语言选型指南:ArkTS、C++与Rust的应用场景与学习路径 在操作系统与应用开发领域,技术栈选型是项目成功的关键基础。其核心原理在于根据不同层级的需求,匹配具备相应特性的编程语言,以实现开发效率、运行性能与系统安全性的最佳平衡。从技术价值看,现代操作系统架构普遍采用分层设计,应用层追求高效开发与跨平台体验,系统层则注重极致性能与硬件控制。在鸿蒙(HarmonyOS)这一分布式操作系统中,这一理念得到典型体现:ArkTS作为应用开发主力,继承了TypeScript的现代特性并深度集成声明式UI框架,大幅降低了前端开发者的迁移门槛,同时通过AOT编译保障了性能;C/C+ 阅读详情

0、学完本篇blog,你将收获什么?

作者写本篇blog的目的是让读者看完这篇blog就可以知道完全了解react native的由来、设计思想,并可以顺利过渡到学习react native语法的阶段。因为,作者在学习完react native的语法之后还是有以下几个疑问:

1、ES6是什么?我之前学过JavaScript,它和JavaScript有什么关系?是不是学了JavaScript就可以不用学ES6了?

2、react.js好像是一种js框架,类似于vue.js,react native和react.js有什么关系?我用不用去专门学习一下react.js?

3、react native的js代码里好像有html标签,为什么可以这样写?

4、配置react native环境时配置了node.js环境,它和react native有什么关系?

5、react native好像是有自己的结构,给我一个react native编写的程序,我该如何读懂?类与类是如何关联的?

 

1、ES6与JavaScript关系

ES5是第五次更新过的JavaScript,在2009年完成,它已被所有主要浏览器支持多年。

ES6是第六次更新过的JavaScript,添加了一些不错的语法和功能,在2015年完成,大部分主要浏览器都支持。

babel是一个广泛使用的转码器,可以将ES6代码转化为ES5代码,而不用担心现有浏览器环境是否支持。

 

2、ReactJs和React Native关系

(1)ReactJs的目的是为了使前端的View层更具组件化,能更好的复用。它能够使用简单的html标签创建更多的自定义组件标签,内部绑定事件,同时可以从操作dom中解脱出来,只需要操作数据就会改变相应的dom。

(2)ReactJs和React Native原理相同,都是由js实现的虚拟dom来驱动界面View层渲染。只不过ReactJs是驱动html dom渲染,React Native是驱动android/ios原生组件渲染。

(3)React基于组件开发,然后组件和组件之间通过props传递方法,每个组件都有一个状态state,当某个方法改变了这个状态值,组件中相应的部分就会更新。

(4)虚拟dom机制:基于React组件进行开发是所有的DOM元素构建都是通过虚拟dom进行,每当数据变化时,React都会重新创建整个dom树,然后React将当前整个dom树和上一次dom树进行对比,得到dom结构的区别,然后仅仅将需要变化的部分进行实际浏览器dom更新。

3、React相比传统JavaScript的优势是什么?

(1)传统JavaScript每次数据变动都要整体重新渲染,性能会非常差,尤其在数据变动频繁、界面复杂时。

(2)每次渲染都重新生成所有dom节点。

(3)React组件化设计思想更符合程序员编程思维。

 

4、什么是JSX语句?

全称是JavaScript XML,是一种React组件内部构建HTML标签的类似于XML的语言,它允许我们编写看起来像HTML的JavaScript,在render()方法中直接把HTML嵌套在JS中的写法就叫做JSX。这种语法结合了JavaScript和HTML的优点,既可以像平常一样使用HTML,也可以在里面嵌套JavaScript语法。例如,一个React组件要呈现一个文本:

class Header extends React.Component {
    render() {
        return (
            <h1>Hello World</h1>
        );
    }
}

这个Header组件的render()函数看起来直接返回了一组HTML标签,但其实这是JSX语句。它被翻译后的代码如下:

class HelloWorld extends React.Component {
  render() {
    return (
      React.createElement(
        'h1',
        {className: 'large'},
        'Hello World'
      )
    );
  }
}

在JS里输出HTML DOM元素其实是通过React.createElement()实现。

 

5、模块的导入导出

React核心思想就是组件化开发,项目中一些功能组件在许多页面都可以复用。

(1)模块

编写大一点的程序时都会将代码模块化。一般将代码合理拆分到不同的js文件中,每一个文件就是一个模块,而文件路径就是模块名。这里需要了解两个概念:模块初始化、主模块。

a)模块初始化

一个模块中的js代码仅在模块第一次被使用时执行一次,并且在执行过程中初始化模块的导出对象。之后,缓存起来的导出模块被重复利用。例如,

counter.js模块内容如下:

var i = 0;

function count() {
    return ++i;
}

exports.count = count;

在使用counter模块时:

var counter1 = require('./util/counter');
var    counter2 = require('./util/counter');

console.log(counter1.count());
console.log(counter2.count());
console.log(counter2.count());

运行结果为:

1

2

3

可以看到,counter.js并没有因为被require了两次而初始化两次。

 

b)主模块

主模块时react native程序的入口,它负责调度组成整个程序的其他模块完成工作。入口组件这样定义:

AppRegistry.registerComponent('HelloWorldReactNative', () => App)

其中registerComponent()方法的第一个参数代表react native工程的名字,App代表入口主模块的名字。

 

(2)模块的导入导出

我们需要知道如何把一个组件导出,使其可以在任何页面使用;还需要知道如何把一个组件导入,因为只有导入到当前页面,才可以使用该组件。

以下面这个Header组件为例,

import React, { Component } from 'react';
import {
 AppRegistry,
 StyleSheet,
 Text,
 View,
 PixelRatio,
} from 'react-native';
 
export default class Header extends Component {
   render() {
     return (
       <View style={styles.flex}>
         <Text style={styles.font}>hangge.com</Text>
       </View>
     );
   }
}
 
const styles = StyleSheet.create({
 flex:{
    marginTop:20,
    height:50,
    borderBottomWidth:3/PixelRatio.get(),
    borderBottomColor:'#2D9900',
    alignItems:'center', /*使Text组件水平居中*/
    justifyContent:'center' /*使Text组件垂直居中*/
 },
 font:{
    color:"#2D9900",
    fontSize:25,
    fontWeight:'bold',
    textAlign:'center' /*使文字在Text组件中居中*/
  },
});

我们把这个组件的代码放到header.js文件中,然后将其export成独立的模块。

export default class Header extends Component

使用时,我们通过import将Header组件加载进来。

import React, { Component } from 'react';
import {
 AppRegistry,
 StyleSheet,
 Text,
 View,
} from 'react-native';
 
import Header from './header'
 
class Main extends Component {
   render() {
     return (
       <View style={styles.flex}>
         <Header></Header>
       </View>
     );
   }
 }
 
 const styles = StyleSheet.create({
  flex:{
     flex:1
  },
 });
 
 AppRegistry.registerComponent('HelloWorld', () => Main);

6、为什么React Native需要Node.JS?

因为react native使用了node.js环境。正是因为这个原因,我们需要对node.js有一个基本的了解。

(1)npm是什么?

npm是随同node.js一起安装的包管理工具,其使用场景主要有以下几种:

 

  • 允许用户从npm服务器下载别人编写的第三方包到本地使用(使用命令npm install ***,下载好的包放在node_modules目录中。如果需要的第三方包比较多,那一个一个下载肯定是不合理的,npm允许在package.json中通过dependencies字段指明第三方包依赖,以达到批量安装第三方包的目的)
  • 允许用户从npm服务器下载并安装别人编写的命令行程序供别人使用
  • 允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用

可以看到,npm建立了一个node.js生态圈,node.js开发者和用户可以在里边互通。

(2)packager是什么?

 

 

7、线上参考手册

 

8、Chrome简单练习

 

9、附上demo

demo地址(觉得ok,可以先star,会持续优化)

 

 

react-native从入门到精通搭建app(一) 一一 简介 一、简介1、React-Native介绍  React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript... 阅读详情

相关推荐

2017年最新React Native(RN)框架入门到精通

2017年最新React Native(RN)框架入门到精通,新手上手必备的视频教程

【React Native入门系列文章 九】如何从零开始学redux?(附demo)

一开始接触redux时对于它和react的关系理解很混乱: 一会儿是state,一会儿又是store,这两者到底有什么关系? 看代码时,dispatch、reducer、action这三者之间需要跳来跳去,它们到底是什么关系?为什么要这样设计结构? connect、mapStateToProps、mapDispatchToProps这三者有什么关系?或者说这三个是干什么的?跟redux有什么关...

你关注了我,是个概率极低的事件...... 1064

react native 零基础从入门到实战

就一套的rn教学,一开始教一些控件的内容,后面会配套项目进行开发

【React Native入门系列文章 六】实战写一个电影列表页

React Native入门系列文章 第一篇:《小白扫盲篇》 第二篇:《如何编写样式》 第三篇:《如何手动开始写一个组件》 第四篇:《组件间通信》 第五篇:《踩过的坑》 第六篇:《实战写一个电影列表页》 第七篇:《网络通信和缓存处理》 第八篇:《Android打包发布》 第九篇:《如何从零开始学redux》 这一节介绍,如何用React Native实现一个电影列表页。...

你关注了我,是个概率极低的事件...... 2193

Cursor+Playwright MCP实现UI全自动化,告别繁琐元素定位!

摘要:本文探讨了利用Cursor和PlaywrightMCP实现UI自动化测试的创新方法。通过将AI编程助手与浏览器自动化技术结合,解决了传统UI自动化测试中元素定位繁琐、维护成本高等痛点。文章详细介绍了项目架构设计、AI使用技巧(包括精准提问和编写.mdc规则文档),以及如何实现自然语言测试用例到自动化脚本的转换。最终实现了测试人员只需输入手工测试步骤,AI即可自动生成完整测试代码的智能化流程,并展望了通过Excel表格一键生成测试用例的未来发展方向,为UI自动化测试提供了高效解决方案。

baidu_29774881的博客 2794

医疗器械软件测试输出内容(1)

*单元测试(Unit Testing):**单元测试是软件测试的最底层,用于验证软件中最小的可测试单元——函数、方法或模块。系统测试是在集成测试之后进行的,它对整个系统进行测试,验证系统在不同部分集成在一起后是否满足需求和规格。: 集成测试是在单元测试之后进行的,它关注不同单元之间的交互和集成。对于不同安全级别的软件(IEC 62304 A类、B类、C类),在体系上要求输出的文件内容有所区别。**说明:**将集成测试和软件系统测试合并为一项单一的计划和一组活动是可接收的。

ct745363083的博客 1867

Semver(语义化版本号)扫盲

前言 最近在处理创建指定版本的 react native 项目的时候,由于自己的粗心大意,命令写成了这样:react-native init demo --version0.47.2 创建的一直是最新版本,最后排查问题的时候发现是自己少加了一个空格(哈哈 ~~,无言以对),正确的写法应该是 react-native init demo --version 0.47.2 一路追踪代码后发现是 cli...

qq_33703877的博客 1598

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3926

Hermes与JSC深度对比:React Native引擎选型与性能优化指南

JavaScript引擎是React Native性能的基石,直接影响App启动速度、内存占用与交互流畅度。JIT(即时编译)与AOT(预先编译)是两类引擎的核心分水岭:JSC源自WebKit,靠JIT追求极致执行效率;Hermes则专门为移动端设计,通过预编译字节码降低启动开销。理解两者在运行机制、内存管理、调试链路及兼容性上的差异,能帮助开发者在不同业务场景下做出合理的技术选型。本文从引擎原理出发,结合实测数据与工程实践,分析Hermes在低端Android设备上的启动优化、包体积缩减效果,以及JSC在

weixin_34198453的博客 326

Android malloc_debug实现原理及使用

2)设置 __libc_globals 对象中的 libc_globals.default_dispatch_table 和 current_dispatch_table 指向 malloc_dispatch_table,以后在 malloc 库函数里都会通过 GetDispatchTable(),这个函数就是返回的 current_dispatch_table 指针;MAX_FRAMES 表示被抓取的 frames 的数量,如果设为0, 表示在分配空间被释放时,不会抓取任何调用栈。

专注于系统快稳省领域 3743

OSG第三方库编译之二十一:minizip编译(Windows、Linux、Macos环境下编译)

OSG编译;第三方库;跨平台编译;minizip编译(Windows、Linux、Macos环境下编译)

LuckyHanMo的博客 2621

会JS就能开发APP!手机混合式开发之最基本扫盲!

你会JS吗?你会开发APP吗? 如今混合式应用成熟,如果你会JS,就可以开发手机APP了! (所以这就是为什么越来越没人学IOS和安卓开发) 今天不多废话,给只掌握JS的同学们指明一条大道,挖掘一下你技术的应用维度,别浪费了。 虽然语言我们只需要JS,但能做到这么多事,自然是要借助现成的框架,也就是说,用什么框架便是关键。 我们今天只介绍最基本的用什么框架可以

dyf_dyf200210的博客 1万+

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 732

ReactNative开发环境搭建-真正的for windows

文章写给已经使用Android Studio开发Android的广大同学,关于ReactNative在Windows环境下的搭建过程。

熊猫卓Sun博客 1384

R数据分析:广义估计方程式GEE的做法和解释

好久没有更新文章了,因为同学们咨询的问题有点多,另一个原因就是自己实在太懒。。。。 今天继续给大家写广义估计方程式GEE。 In statistics, a generalized estimating equation (GEE) is used to estimate the parameters of a generalized linear model with a possible unknown correlation between outcomes. 上面的英文解释告诉我们,当我们

Codewar的博客 1万+

知识图谱:综述

第一种理解:知识图谱本质上是语义网络。本体论是语义网络中最重要的一个要素。第二种理解:知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成。课程以第二种理解为主。

u013250861的博客 479

《跨终端 Web》- 读书笔记(一)

引言这本书是从 2017-02-16 开始起读,由于 React-Native 的兴起,使得跨平台开发 App 的成本越来越低,而对于这新兴的技术,我也总是想找机会来学习一下。恰巧公司要开始进行新的尝试,想利用 React 和 React-Native 的共同点,来研究出一套适合三端的框架,即:Web / Android / iOS。在有限的空间和时间上,快速开发出功能、业务均相似甚至是相同的产品。

__F5 876

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

热更新和热修复 个人小结

热修复和热更新 1 热更新和热修复:在线修复程序的 BUG 2 JSPach 的使用原理: OC 是一门动态运行时的语言,方法的运行和对象的创建是在运行时中创建的.JSPatch 正的用运行时,通过JavaScriptCore.framework作为 JS引擎,从 JS 动态调用方法和对象到OC 中,再作用NSInvocation动态调用对应的方法.例 Class class = N...

weixin_30566063的博客 158

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

React Native展示富文本(HTML标签)最佳解决方案

需求背景 我们最近要做一个React Native的产品详情页,里面有一部分内容展示的是服务端下发的html标签(运营人员编写的,内容不固定,且很随意)。需求点是:1、展示富文本,包括img、span、div等基本html标签;2、控制富文本的整体样式,比如业务配置的图片大小不一,我们要统一已屏幕宽度为基准,高度自适应。 第三方组件react-native-htmlview 要实现这个需求,我第一...

你关注了我,是个概率极低的事件...... 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【React Native】环境搭建的error calling AppRegistery.runApplication解决办法

折腾了几天,终于把开发环境搭建成功了。这中间遇到了太多坑:(1)公司台式机没有无线网卡,而手机和packager必须要连接同一网段。只能去淘宝买一个无线网卡装上。(2)init出工程后,一直报错error calling AppRegistery.runApplication。     这个bug网上的答案非常少,以至于我在想这肯定是携程的windows台式机做了什么配置,然后尝试去修改host文...

你关注了我,是个概率极低的事件...... 6853

【web安全】深入浅出XSS攻击

在学习JS的过程中,你一定听说过CSRF攻击和XSS攻击。关于CSRF攻击,我已经在之前的文章中介绍过了,本文就来介绍一下XSS攻击。 XSS定义和原理 发出请求时,XSS代码出现在url中,作为输入提交到服务端,服务端解析后响应,XSS代码随响应内容一起回传给浏览器,最后浏览器解析并执行XSS代码。 XSS防御措施 一般xss防御措施有三种: 编码 过滤:原样显示用户输入内容时,要把不合法的内...

你关注了我,是个概率极低的事件...... 5412

require和import有啥区别?

今天在研究react的lazyRequire时突然想到了这个问题,于是展开了一些列研究。。 要回答这个问题,必须从模块化说起。 所谓模块化主要就是解决代码分割、作用域隔离、模块之间的依赖管理。 通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。 流行的模块化规范有:CommonJS、AMD、CMD、ES6的模块系统。 这里简单介绍下CommonJS规范和ES6 Module...

你关注了我,是个概率极低的事件...... 1596

箭头函数this指向的陷阱

箭头函数没有this! 箭头函数没有this!! 箭头函数没有this!!! 重要的事情说三遍! 那你可能要问我在箭头函数中明明可以取到this啊! function foo() { this.a = 1 let b = () => console.log(this.a) b() } foo() // 1 以上箭头函数中的this其实是父级作用域中的this,箭头函数...

你关注了我,是个概率极低的事件...... 1184

摆脱create-react-app,来让我们自己搭建一个react脚手架

创建一个文件夹REACT-CNODE-TEACH mkdir REACT-CNODE-TEACH 在文件夹中npm init(我们使用npm来管理依赖包) 一路点回车就行,当然你也可以去详细配置下工程信息。 装一个webpack 一个react工程,怎么能不安装react? 这个时候我们要配置一下webpack,我们先在工程根目录创建一个文件夹build,然后创建一个webpack配置文件...

你关注了我,是个概率极低的事件...... 796

【css布局】display、position、float、overflow

css布局主要有两种方式:传统的布局方式是基于盒状模型,目前广泛使用的是基于flex布局。本文主要介绍盒状模型的三个最基本的概念display、position、float,这算是盒状模型的基础中的基础了。   一、块级元素与行内元素: 1、块级元素:p、ul、form、div 2、内联元素(行内元素):span、input 3、两者区别:块级元素会从上到下垂直排列,内联元素在一行中...

你关注了我,是个概率极低的事件...... 786

聊一聊如何使用context,这是学习redux源码的基础哦

在学习redux源码一段时间之后,我发现不懂得context如何使用已经阻碍到我理解redux的设计思想了。。 所以,这里介绍一下react的context如何使用,不过这个api可能你在业务开发时永远不会用到。。 好了,废话不多说,我们来讲解下context如何使用。 一. 如何使用context? 想象一下,我们有现在这样一个页面(Index),其组件树长成如下这个样子: 假设这个组件树里的...

你关注了我,是个概率极低的事件...... 753
上一篇: 【如何学习一门新语言】HTML5基础培训总结
下一篇: 【React Native入门系列文章 四】组件间通信【重要】
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值