此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法,此小节主要介绍 React 的底层原理与机制。

目前 React 可以说是前端世界最火热的框架,具有高性能以及容易上手的特性,而且在掌握了 React 框架后,再学习其他类似 React 的框架也将变得更易上手。

关于 React 框架的高性能原因以及底层的重要概念,我们在后续的章节会陆续展开探讨,这一章节我们先来通过一个实际的案例来探究 React 的重要概念与特性。

如果你对 React 框架已非常熟悉,可以选择性地跳过此章节,直接阅读后续章节即可。

1. React 框架的安装

学习 React 框架,我们可以通过如下几种方式搭建开发环境进行快速地学习。

1.1 使用在线代码编辑器编写学习

在线编辑器中可以灵活地切换 React 的版本以及选择 Babel 作为 JSX 代码到 JavaScript 的预处理转换。

如官方推荐的在线代码编辑器 React 环境:CodePen

1.2 本地开发环境的搭建

1.2.1 安装 Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。

Node.js 本身不是一个新的开发语言,也不是一个 JavaScript 框架,而是一个 JavaScript 的运行时。底层为 Google Chrome V8 引擎,并在此基础上进行了封装,可用于创建快速、高效、可扩展的网络应用。Node.js 采用事件驱动与非阻塞 I/O 模型,以使得 Node.js 轻量并高效。

Node.js 中包含了 npm 系统,npm 是 Node.js 的包生态系统,是最大的开源生态系统。你可以理解为基于 Node.js 框架,全世界的开发者提交了各种各样的功能类库到 npm 中,其他开发者在开发过程中需要使用的大部分功能都可以在 npm 中找到已存在的库,完全不需要自己再重复去“造轮子”。

Node.js 框架的安装只需要去 Node.js 官网 下载你对应平台的安装包直接安装即可。

1.2.2 安装官方脚手架项目

create-react-app 脚手架项目存在于 npm 包系统中,所以可以直接通过 npm 命令在命令行工具中进行安装。

npm install -g create-react-app

之后即可通过命令行进行 React 项目的初始化。

create-react-app your-app-project-name

2. React 中的 JSX、state 与 props

JSX、state 与 props 是 React 框架最重要最基础的三个知识点,而从根本上说,你在掌握了这三个知识点后就可以使用 React 进行项目的开发了,其他的知识点基本上翻看下文档就可以快速掌握。

2.1 组件实例设计介绍

下面我们通过 React 组件化设计了两个页面组件:

  1. 入口组件定义为 Index;
  2. Index 组件中加载了一个子组件,定义为 BodyIndex;
  3. Index 组件会向 BodyIndex 组件中传递两个参数:id 和 name;
  4. BodyIndex 组件中还有一个自身的属性 username,并会在组件加载 5 秒后自动修改定义的值。

通过此实例,大家需要注意实例中的如下几个知识点:

  1. React 组件的定义;
  2. JSX 代码的语法结构;
  3. 组件属性 state 的定义;
  4. 组件通过 props 传递参数的方法。

2.2 组件实例代码实现

2.2.1 组件 Index 的代码实现

/**
* index.js 定义了 React 项目的入口,Index 组件
*/ var React = require('react');
var ReactDOM = require('react-dom');
import BodyIndex from './components/bodyindex';
class Index extends React.Component { //页面表现组件渲染
render() {
return (
<div>
<BodyIndex id={1234567890} name={"IndexPage"}/>
</div>
);
}
} ReactDOM.render(<Index/>, document.getElementById('example'));

2.2.2 子组件 BodyIndex 的代码实现

/**
* bodyindex.js 定义了一个 BodyIndex 子组件
*/ import React from 'react';
export default class BodyIndex extends React.Component {
constructor() {
super();
this.state = {
username: "Parry"
};
} render() {
setTimeout(() => {
//5秒后更改一下 state
this.setState({username: "React"});
}, 5000); return (
<div> <h1>子组件页面</h1> <h2>当前组件自身的 state</h2>
<p>username: {this.state.username}</p> <h2>父组件传递过来的参数</h2>
<p>id: {this.props.id}</p>
<p>name: {this.props.name}</p> </div>
)
}
}

2.3 组件实例的页面表现与代码解释

浏览器中的运行效果如下图所示,并且在 5 秒后子组件的 state 定义的 username 值由 Parry 变成了 React。

你可以直接在本地编写代码运行测试或直接下载配套源码直接运行,运行后,注意此 state 页面值更新的部分,整个页面没有进行任何的重新刷新加载,而只是进行了局部的更新。

注意这里的局部更新你可能想到了熟悉的 Ajax 页面无刷新的更新操作,但是逻辑代码部分没有进行任何的页面 DOM 元素操作,而这正是 React 的核心以及高性能特性所在,具体的底层原理我们会在后续的章节深入讲解。

对于实例代码中几个重要知识点的解释:

  1. 组件定义头部使用 requireimport 引入了一些必备的组件,后续 React 开发加载的第三方 npm 框架也使用此方法引入;
  2. 组件 Index 中引入的子组件 BodyIndex 在页面布局中可以直接按照 HTML 的标签形式进行引用;
  3. 子组件 BodyIndex 中通过 props 获取父组件传递过来的属性值;
  4. 自身的属性通过 state 进行定义,页面的显示也直接通过 state 进行绑定,而后续在逻辑函数中修改了 state 值之后,页面绑定的值也会随之变更,并且变更的过程页面完全是无刷新的,这正式 React 框架的重要特性,页面的所有变更都是通过 state 值的变更驱动的。

以上完整代码你可以在 JueJin-Book-React-Native-Demo 处下载。

系列文章其他相关资源

我的「React.js 入门与实战」视频教程:http://coding.imooc.com/class/83.html

我的《React Native 精解与实战》书籍:http://rn.parryqiu.com/

我的更多免费原创视频教程:https://devopen.club/

3. 小结

此章节和大家一起通过对 React 开发环境的构建以及一个实际的组件实例学习了 React 中最基础的三个概念:JSX、state 与 props,并领略到 React 构建的页面更新完全是通过后台 state 值的变更驱动的,这有别于我们之前接触的前台框架,是通过直接操作 HTML DOM 结构进行页面的更新。

而 React 框架这样设计的优势以及背后的底层原理,我们在接下来的几个章节会进行逐步深入地探讨,以便切合此系列文章的定位,而在使用 React 开发过程中遇到的任何其他细节问题,你都可以通过下方的留言向我提问即可,这里限于篇幅就不对 React 框架的基本使用展开讲解。

React 与 React Native 底层共识:React 是什么的更多相关文章

  1. 《React Native 精解与实战》书籍连载「React Native 底层原理」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  2. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

  3. React-Native(三):React Native是基于React设计的

    React Native是基于React js设计的. 参考:<React 入门实例教程> React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript ...

  4. 【React Native开发】React Native移植原生Android项目(4)

    ),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...

  5. [React Native] Installing and Linking Modules with Native Code in React Native

    Learn to install JavaScript modules that include native code. Some React Native modules include nati ...

  6. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  7. React系列(一):React入门

    React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据 ...

  8. react.js 从零开始(七)React (虚拟)DOM

    React 元素 React 中最主要的类型就是 ReactElement.它有四个属性:type,props,key 和ref.它没有方法,并且原型上什么都没有. 可以通过 React.create ...

  9. 如何使用TDD和React Testing Library构建健壮的React应用程序

    如何使用TDD和React Testing Library构建健壮的React应用程序 当我开始学习React时,我努力的一件事就是以一种既有用又直观的方式来测试我的web应用程序. 每次我想测试它时 ...

随机推荐

  1. C#-封装(七)

    封装概念 C#是面向对象的一门语言,面向对象的语言有三大特性:封装.继承.多态.而封装可以实现一个自定义的类,从而定义新的对象 封装是将一个或多个项目集合在一个单元中,这个单元称之为类.这样可以防止对 ...

  2. 自动化测试基础篇--Selenium简单的163邮箱登录实例

    摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...

  3. Apache kylin 入门

    本篇文章就概念.工作机制.数据备份.优势与不足4个方面详细介绍了Apache Kylin. Apache Kylin 简介 1. Apache kylin 是一个开源的海量数据分布式预处理引擎.它通过 ...

  4. Unknown initial character set index '255' received from server. Initial client character set can be

    mysql的连接错误,在网上查找到是编码不匹配的原因, 直接在连接的URL后加上?useUnicode=true&characterEncoding=utf8就可以了

  5. c/c++ 网络编程与多线程 编译参数

    网络编程与多线程 编译参数 编译时要链接操作系统的pthread库 g++ -g socket01.cpp -std=c++11 -pthread 不加-pthread的话,出现下面的错误: term ...

  6. Linux 小知识翻译 - 「NTP」

    这周聊聊「NTP」. 上次,聊了「时区」,也就是时间相关的话题. NTP是「Network Time Protocol」的简称,是为了将网络中计算机的时钟同步到正确时间的协议. PC内部的时钟是相当不 ...

  7. 类中的 this关键字

    this可用于区分局部变量和成员变量,因为构造函数中如果使用 this.成员变量 = 参数值, 那么可以在new对象时,将初始化值赋值给成员变量,否则成员变量赋值失败, 所以this可以区分成员变量和 ...

  8. Mybatis报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'parentCode' not found. Available parameters are [0, 1, param1, param2]

    orcal数据库使用mybatis接收参数,如果传的是多个参数,需要使用#{0},#{1},...等代替具体参数名,0 代表第一个参数,1 代表第二个参数,以此类推. 错误语句: <select ...

  9. Java虚拟机(Java Virtual Machine)

    JVM(Java Virtual Machine),Java虚机机,是JDK最底层的东西.只要能将源代码编译成字节码(.class)文件,就可以由JVM在不同平台上解释成机器指令来执行.所以,Java ...

  10. webpack模块定义和使用的模式

    在使用webpack作为模块加载工具时,我在想module.exports的模块应该是一种什么模式,最直接地思考是单例.不太确定,所以写一个简单例子做测试. 测试代码 singleton.js: va ...