1、介绍

React中文官网:https://react.docschina.org

React是用于构建用户界面的JS库,起源于Facebook的内部项目,该公司对市场上所有JS MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站,于2013年5月开源。

React主要用于构建UI,只关注视图层。

2、为什么使用React

优点

声明式设计:React采用声明范式(语法十分接近HTML),可以轻松描述应用。

组件化:为程序编写独立的模块化UI组件,然后组合构成复杂的UI,这样当某个组件出现问题时,可以方便地进行隔离排查。

速度快:在UI渲染过程中,React不总是直接操作页面真实DOM,而是通过在虚拟DOM中的微操作,来实现对实际DOM的局部更新(优秀的Diffing算法)。

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

缺点

React并不是一个完整的框架,本身只是View,如果是大型项目想要一套完整的框架的话,基本都需要加上ReactRouter和Flux才能写大型应用。

3、安装引入React

  • react.js:React核心库。
  • react-dom.js:React操作DOM的拓展库。
  • babel.js:提供JSX=>JS、ES6=>ES5的工具包库。

方式一:通过标签引入(版本17)

源码版(开发环境)

<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.js"></script>

压缩版(生产环境)

<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

方式二:通过npm安装引入(版本17)

npm install react@17 react-dom@17 babel@6

4、入门使用案例

这里演示React创建虚拟DOM,并将虚拟DOM渲染到页面真实DOM。

方式一:使用JS方式(一般不用)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>使用js创建虚拟DOM</title>
    </head>
    <body>
        <!-- “容器”标签,用于给React渲染虚拟DOM -->
        <div id="container"></div>

        <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
        <script src="https://unpkg.com/babel-standalone@6/babel.js"></script>

        <script type="text/javascript" > 
            /**
             * 1.创建虚拟DOM
             *      参数1:标签名
             *      参数2:标签属性(这里为h1标签添加title属性)
             *      参数3:标签内容
             */
            const VDOM = React.createElement('h1',{"title":"articleTitle"},"h1标签内容")
            /**
             * 2.渲染虚拟DOM到页面
             *      参数1:需要被渲染的虚拟DOM
             *      参数2:虚拟DOM被渲染到的目标标签
             */
            ReactDOM.render(VDOM,document.getElementById('container'))
        </script>
    </body>
</html>

方式二:使用JSX方式(最常用,但其实最终babel还是会将JSX转换成JS的方式创建虚拟DOM)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>使用jsx创建虚拟DOM</title>
    </head>
    <body>
        <!-- “容器”标签,用于给React渲染虚拟DOM -->
        <div id="container"></div>

        <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
        <script src="https://unpkg.com/babel-standalone@6/babel.js"></script>

        <!-- 此处script标签的type属性一定要为babel,因为需要依赖babel将jsx代码转为js代码 -->
        <script type="text/babel" >
            //1.创建虚拟DOM
            const VDOM = (  /* 此处一定不要写引号,因为不是字符串,此处是JSX语法 */
                <h1 title="articleTitle">
                    h1标签内容
                </h1>
            )
            //2.渲染虚拟DOM到页面
            ReactDOM.render(VDOM,document.getElementById('container'))
        </script>
    </body>
</html>

5、虚拟DOM

什么是虚拟DOM

虚拟DOM本质上是一个JS对象(object类型),对象内部封装了一些属性。在指定的时刻,React将虚拟DOM渲染到页面的实际DOM,本质还是通过js操作页面DOM实现的。

虚拟DOM好处

虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。

通过在虚拟DOM中的微操作,实现对实际DOM的局部更新,避免每次直接操作页面真实DOM,减少真实DOM操作次数,提高效率。

react里使用rem react-_react里使用rem