目录

  • 前言:
  • 一、React 简介
    • 1. 什么是 React
    • 2. React 的特点
    • 3. React 高效的原因
    • 4. React 官网
    • 5. React的主要原理
    • 6. Facebook为什么要建造React?
  • 二、React 的基本使用
    • 1. 基础代码
    • 2. 效果
    • 3. 相关 js 库
    • 4. 创建虚拟DOM的两种方式
    • 5. 虚拟DOM与真实DOM
    • 6. 虚拟DOM与真实DOM的区别
  • 三、React JSX
    • 1. 什么是 JSX
    • 2. 渲染虚拟DOM(元素)
    • 3. JSX 的使用
    • 4. JSX 的语法规则
  • 四、模块与组件、模块化与组件化的理解
    • 1. 模块
    • 2. 组件
    • 3. 函数式组件
    • 4. 类式组件
  • 总结:

前言:

本文会引导我们进入一段 React 学习之旅。我们将逐步了解有关它的背景和用例的一些细节,在自己的电脑上建起基本的 React 工具链,创建并使用一个简单的入门应用程序,以学习一些关于 React 在此过程中如何工作的知识。


一、React 简介

1. 什么是 React

  1. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。
  2. React 是一个用于构建用户界面的JavaScript 库。React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。
  3. React 是用于动态构建用户界面的 JavaScript 库(只关注于视图)

2. React 的特点

  1. 声明式编码
  2. 组件化编码
  3. React Native 编写原生应用
  4. 高效(优秀的Diffing算法)
  5. JSX 语法
  6. 单向数据绑定
  7. 虚拟 DOM
  8. Component

3. React 高效的原因

  1. 使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。
  2. DOM Diffing算法, 最小化页面重绘。

4. React 官网

  1. 英文官网: https://reactjs.org/
  2. 中文官网: https://react.docschina.org/

5. React的主要原理


6. Facebook为什么要建造React?


二、React 的基本使用

1. 基础代码

引入js 库地址下载地址

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="test"></div>
    <!-- 引入 React 核心库 -->
    <script src="../js/react.development.js"></script>
    <!-- 引入 react-dom 用于支持 react 操作 DOM -->
    <script src="../js/react-dom.development.js"></script>
    <!-- 引入babel:
            1. ES6 ==> ES5
            2. jsx ==> js
    -->
    <script src="../js/babel.min.js"></script>
    <script type="text/babel">
        // 1. 创建虚拟 DOM
        const VDOM = <h1>Hello,React</h1>
        // 2. 渲染到页面中的指定 DOM
        // ReactDOM.render(虚拟DOM,真实DOM)
        ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
</body>
</html>

2. 效果

React 入门(超详细)

3. 相关 js 库

  1. react.js:React 核心库。
  2. react-dom.js:提供操作 DOM 的 react 扩展库。
  3. babel.min.js:解析 JSX 语法代码转为 JS 代码的库。
// 引入 React核心库
<script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
// 引入 react-dom 用于支持 react 操作 DOM
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
// 引入 babel:1. ES6 ==> ES5		2. jsx ==> js
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

4. 创建虚拟DOM的两种方式

  1. 纯JS方式(一般不用)
<script type="text/javascript">
    // 1. 创建虚拟 DOM
    // const VDOM = React.createElement(标签名,标签属性,标签内容)
    const VDOM = React.createElement('h1', { id: 'title' }, React.createElement('span', {}, 'Hello,React'))
    // 2. 渲染到 DOM
    ReactDOM.render(VDOM, document.getElementById('test'))
</script>
  1. JSX方式
<script type="text/babel">
   // 1. 创建虚拟 DOM
    const VDOM = (
        <h1>Hello,
            <span>React</span>
        </h1>
    )
    // 2. 渲染到页面中的指定 DOM
    // ReactDOM.render(虚拟DOM,真实DOM)
    ReactDOM.render(VDOM,document.getElementById('test'))
</script>

5. 虚拟DOM与真实DOM

1.React提供了一些API来创建一种 “特别” 的一般js对象

2.虚拟DOM对象最终都会被React转换为真实的DOM
3.我们编码时基本只需要操作react的虚拟DOM相关数据, react会转换为真实DOM变化而更新界。


6. 虚拟DOM与真实DOM的区别

关于虚拟DOM:

  1. 本质是Object类型的对象(一般对象)
  2. 虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部生成并使用的。
  3. 虚拟DOM最终会被React转换为真实DOM,渲染在页面上;
<script type="text/babel">
    // 1. 创建虚拟 DOM
    const VDOM = (
        <h1>Hello,
            <span>React</span>
        </h1>
    )
    // 2. 渲染到页面中的指定 DOM
    // ReactDOM.render(虚拟DOM,真实DOM)
    ReactDOM.render(VDOM,document.getElementById('test'))
    const TDOM = document.getElementById('demo')
    // console.log(typeof VDOM) // Object
    // console.log(VDOM instanceof Object) // true
    console.log('虚拟DOM',VDOM)
    console.log('真实DOM',TDOM)
    // 调试
    debugger
</script>

三、React JSX

1. 什么是 JSX

  1. 全称: JavaScript XML
  2. react 定义的一种类似于 XML 的JS扩展语法: JS + XML 本质是 React.createElement(component, props, ...children) 方法的语法糖
  3. 作用: 用来简化创建虚拟DOM
    1. 写法:var ele = <h1>Hello JSX!</h1>
    2. 注意1:它不是字符串, 也不是 HTML/XML 标签
    3. 注意2:它最终产生的就是一个JS对象
  4. 标签名任意: HTML 标签或其它标签
  5. 标签属性任意: HTML 标签属性或其它
  6. 基本语法规则
    1. 遇到 <开头的代码, 以标签的语法解析: html同名标签转换为html同名元素, 其它标签需要特别解析
    2. 遇到以 { 开头的代码,以JS语法解析: 标签中的js表达式必须用{ }包含
  7. babel.js的作用
    1. 浏览器不能直接解析JSX代码, 需要 babel 转译为纯JS的代码才能运行
    2. 只要用了JSX,都要加上type="text/babel", 声明需要 babel 来处理

2. 渲染虚拟DOM(元素)

  1. 语法: ReactDOM.render(virtualDOM, containerDOM)
  2. 作用: 将虚拟DOM元素渲染到页面中的真实容器DOM中显示
  3. 参数说明
    1. 参数一: 纯js或jsx创建的虚拟dom对象
    2. 参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)

3. JSX 的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .title{
            background-color: aliceblue;
            width: 200px;
        }
    </style>
</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="test"></div>
    <!-- 引入 React 核心库 -->
    <script src="../js/react.development.js"></script>
    <!-- 引入 react-dom 用于支持 react 操作 DOM -->
    <script src="../js/react-dom.development.js"></script>
    <!-- 引入babel:
            1. ES6 ==> ES5
            2. jsx ==> js
    -->
    <script src="../js/babel.min.js"></script>
    <script type="text/babel">
        let myData = 'Student'
        let myId = 'ITStudent'
        // 1. 创建虚拟 DOM
        const VDOM = (
            <div>
                <h1 className="title" id={myId.toUpperCase()}>Hello,
                    <span style={{color:'white',fontSize:'20px'}}>{myData}</span>
                </h1>
                <input type="text" />
                <Good></Good>
            </div>
        )
        // 2. 渲染到页面中的指定 DOM
        // ReactDOM.render(虚拟DOM,真实DOM)
        ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
</body>
</html>

4. JSX 的语法规则

  1. 定义虚拟DOM时,不要写引号;
  2. 标签中混入JS表达式时,要用 {}
  3. 样式的类名指定不要用class,要用className;
  4. 内联样式,要用style={{key:value}}的形式去写
  5. 只能有一个根元素
  6. 所有标签都必须闭合
  7. 标签的首字母:
    1. 若小写字母开头,则将该标签转化为html同名的元素,渲染到页面;
    若html没有同名的元素,则报错。
    2. 若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错;

四、模块与组件、模块化与组件化的理解

1. 模块

  1. 理解:向外提供特定功能的js程序, 一般就是一个js文件
  2. 为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂。
  3. 作用:复用js, 简化js的编写, 提高js运行效率

什么是模块化?

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


2. 组件

1.理解:用来实现局部功能效果的代码和资源的集合(html/css/js/image等等)
2.为什么要用组件: 一个界面的功能更复杂
3.作用:复用编码, 简化项目编码, 提高运行效率

什么是组件化?

当应用是以多组件的方式实现, 这个应用就是一个组件化的应用

React 入门(超详细)


3. 函数式组件

<script type="text/babel">
    // 1. 创建函数式组件
    function MyComponent(){
        // 这里的this是undefined,因为babel编译,开启了严格模式
        console.log(this)
        // 一定需要有返回值
        return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
    }
    // 2. 渲染到页面中的指定 DOM
    // ReactDOM.render(虚拟DOM,真实DOM)
    ReactDOM.render(<MyComponent />,document.getElementById('test'))
    /*
        执行 ReactDOM.render() 方法之后,发生了什么?
            1. React 解析了组件标签,找到对应的组件
            2. 发现这个组件是一个函数定义的,随后调用该函数,生成了一个虚拟DOM
            3. 最后将虚拟DOM转化为真实DOM,呈现在页面中;
    */
</script>

函数式组件执行过程?

  1. React 解析了组件标签,找到对应的组件
  2. 发现这个组件是一个函数定义的,随后调用该函数,生成了一个虚拟DOM
  3. 最后将虚拟DOM转化为真实DOM,呈现在页面中;

4. 类式组件

<script type="text/babel">
    // 1. 创建一个类式组件
    class MyComponent extends React.Component{
        // render方法是放在原型上的
        // render中的this是谁? -- 实例对象 <===> MyComponent组件实例对象
        render(){
            console.log('render中的this',this)
            return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
        }
    }
    // 2. 渲染到页面中的指定 DOM
    // ReactDOM.render(虚拟DOM,真实DOM)
    ReactDOM.render(<MyComponent />,document.getElementById('test'))
    /*
        执行 ReactDOM.render() 方法之后,发生了什么?
            1. React 解析了组件标签,找到对应的组件
            2. 发现这个组件是一个类定义的,随后new出来一个实例对象,并通过该实例调用原型上的render方法
            3. 将render()返回的内容生成了一个虚拟DOM
            4. 最后将虚拟DOM转化为真实DOM,呈现在页面中;
    */
   let c = new MyComponent()
   console.log(c)
</script>

类式组件执行过程?

  1. React 解析了组件标签,找到对应的组件
  2. 发现这个组件是一个类定义的,随后new出来一个实例对象,并通过该实例调用原型上的render方法
  3. 将render()返回的内容生成了一个虚拟DOM
  4. 最后将虚拟DOM转化为真实DOM,呈现在页面中;

总结:

欢迎大家加入我的社区,在社区中会不定时发布一些精选内容:https://bbs.csdn.net/forums/db95ba6b828b43ababd4ee5e41e8d251?category=10003


以上就是 React 入门(超详细),不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog