react

作者:高天阳

邮箱:13683265113@163.com

更改历史

* 2019-08-16        高天阳     补充文档
* 2018-07-11        高天阳     初始化文档

React简介

React是一个用于构建用户界面的JAVASCRIPT库,主要用于构建UI,它起源于Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源。 截止18年,React已经成为使用人数最多的前端框架,拥有着十分健全的文档与完善的社区

React主要有三大类应用

  • React JS 主要用于网页应用的构建

  • React Native 主要用于原生应用的构建

  • React VR 主要用于VR应用(全景视图应用)的构建

React Fiber是什么

React16之后的版本统称,主要是对底层核心算法进行了优化,引入了优先级的概念、分片的概念,可以使代码运行的更加流畅,尤其是针对一些复杂的动画。

React 特点

  1. 灵活 − React可以与已知的库或框架很好地配合。

  2. JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但React建议使用它。

  3. 单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

  4. 组件化开发 − Component-Based 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

  5. 声明式开发 − Declarative 命令式的局部包装(声明式开发与命令式开发对应)

  6. 多端使用 - Learn Once,Write Anywhere 支持客户端与服务器渲染

  7. 高效

    1. − React通过对DOM的模拟,最大限度地减少与DOM的交互。

    2. − 高效的DOM Diff算法,最小化页面重绘

快速构建 React 开发环境

安装较新版本的Node.js,并使用npx命令安装React App

创建新的 React 应用

注意

第一行的 npx 不是拼写错误 —— 它是 npm 5.2+ 附带的 package 运行工具。

完整搭建实例

React 渲染元素

元素就是您要在屏幕上看到的内容,例如:

假设你的HTML文件有一个<div>: <div id=“root”></div>我们称之为“根”DOM节点,其中的所有内容都将由React DOM进行管理, 要将React元素渲染到根DOM节点中,请将其两者都传递给ReactDOM.render():

模块与组件

模块

  • 什么是模块:向外提供特定功能的js陈醋,一般就是一个js文件

  • 需要的原因:js代码随开发变多变复杂

  • 作用:简化js的编写, 便于阅读, 提高运行效率,降低耦合度,防止变量全局污染

组件

如上图,组件就是网页中的一部分,每一个虚线框包裹的内容,都可以封装成一个组件。

组件可以让您将UI拆分成独立的可重复使用的部分,组件就像JavaScript函数。他们接受任意输入,并返回应该在屏幕上显示的React元素。

  • 理解: 用来实现特定功能效果的代码集合(html/css/js)

  • 为什么: 一个界面的功能越来越复杂

  • 作用: 可复用, 简化项目编码, 提高运行效率

使用定义的组件:

模块化与组件化

  • 模块化:当应用的js都以模块来编写的, 这个应用就是一个模块化的应用

  • 组件化:当应用是以多组件的方式实现功能, 这上应用就是一个组件化的应用

简单的JSX语法

JSX是JavaScript的语法扩展,利用JSX编写DOM结构,可以用原生的HTML标签,也可以直接像普通标签一样引用React组件。 这两者约定通过大小写来区分,小写的字符串是HTML标签,大写开头的变量是React组件。

实例:JSX中使用JavaScript表达式,表达式可写在花括号{}中:

注:只能写表达式,不能写js语句,如if等。

示例

在React官方代码示例中,共分为如下几个文件。

index.js文件内容如下

App.js文件内容如下

也可以写做

这是两种定义组件的方式,一种是解释型的函数来定义,一种使用ES6的class来继承。函数型的定义比较简单,语法清晰, 但是不能使用state和lifecycle(或者说如果使用的话需要hook)。class继承的方式相对复杂,但可以拥有state和lifecycle。 参考资料

TodoList功能

TodoList初始化组件

改造原有代码,将App.js改为TodoList.js

代码如下

TodoList新增

TodoList删除

TodoList子组件的拆分及父子之间的传参

Last updated

Was this helpful?