IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React框架简介(JSX语法、组件、虚拟DOM渲染) -> 正文阅读

[JavaScript知识库]React框架简介(JSX语法、组件、虚拟DOM渲染)

React框架

React是一个JS库,可以简化可视化界面的开发,由Facebook在2013年发布。

为什么要学习React

那么为什么要学习React呢?

这要先从原生js的痛点出发,原生JS的痛点在于:

  • 用DOM的API去操作DOM,过程十分繁琐,且效率低
  • 用js直接操作DOM,浏览器会进行大量的回流和重绘
  • 原生JS没有组件化,代码复用率低

那么,React又如何呢?

React特点

  • 组件化开发,代码复用率高,提高开发效率
  • 使用虚拟DOM和Diff算法,尽量减少与真是DOM的交互,提高页面性能

故前端常使用React框架来简化开发,提高开发效率。

React核心

(1)React基于JSX(JavaScript Xml)的语法,可以和html,js混合书写

JSX语法:组件可以以自定义标签的形式引用;

(2)组件(Component):是数据和逻辑的封装体,可以实现用户界面的模块化开发,提高了代码复用率、简化了开发,可维护性好。

React框架的最大优势在于:支持创建虚拟DOM,提高页面性能

JSX语法

(1)JSX就是JavaScript XML的缩写,是基于JavaScript的XML;

(2)通过React XML方式定义的虚拟DOM,最终也会转换为通过createElement()方法创建的节点。

语法详解

(1)一般语法形式

const element=(
			<tag-level-1>  //根标签
			  	<tag-level-2>
			  	</tag-level-2>
			</tag-level-1>
) 

注意:

  • element中必须有且只能有一个根标签;
  • 模块化开发中(组件)允许使用<></>作为根标签

(2)JSX算术表达式:用大括号{}表示

例如:

const reactSpan = (
           <span>
              <h3>JSX算术表达式</h3>
              <p>
                1+2 = { 1+2 }    //显示1+2=3
              </p>
           </span>
        )

(3)JSX条件表达式:在JSX表达式中不能使用if语句,但是可以使用条件表达式(?:构成的表达式)
使用条件运算符:xx?xx:xx

const reactSpan = (
           <span>
              {1==1?'满足条件输出':'不满足条件输出'}   //显示  满足条件输出
           </span>
        )

(4)JSX嵌入表达式:在外部定义变量,在虚拟DOM中通过‘{}’引用变量

(5)JSX对象表达式:可以通过“对项名.属性名”的方法使用

例如:

name='张三'
var obj={
            name:'星子',
            gender:'女',
        }
const reactSpan = (
   <span>
   	  <p>姓名:{name}</p>
      <p>姓名:{obj.name}</p>
      <p>性别:{obj.gender}</p>
   </span>
)

(6)JSX函数表达式:在JSX中可以直接调用JavaScript中的函数

var obj={
    name:'星子',
    gender:'女',

}

function showInfo(user){
    return '姓名:'+user.name+'\n性别:'+user.gender;
}
const reactSpan = (
   <span>
   	  <p>{showInfo(obj)}</p>
   </span>
)

React开发过程

(1)导入对应的js文件

<script src="../js/react.development.js"></script>   <!--React核心库-->
<script src="../js/react-dom.development.js"></script>   <!--React与Dom有关的库-->
<script src="../js/babel.min.js"></script>      <!--用于将ES6转换为ES5-->

babel主要是用来将ES6或更高版本的js代码转换为ES5的代码,从而提高兼容性

(2)创建DOM
(3)进行DOM的渲染:React.render(虚拟DOM,实际DOM)

实际DOM

传统的HTML的UI设计,承载了数据的呈现和更新,浏览器在呈现DOM之前,要构建一颗DOM树,一旦该DOM树种某一个节点发生了变化,就必须重新构建树(从头开始遍历节点,直到改变了的节点);对于复杂的DOM,频繁的重建DOM树就会导致页面性能下降。

虚拟DOM

先构建一颗虚拟的DOM树,若树中的某一点发生了变化,只对虚拟DOM树进行局部更新,然后将虚拟的DOM渲染到实际的DOM中。

例如:

<div id="react-div"></div>
<script type="text/babel">
    const reactDiv=document.getElementById('react-div')
    var arr=[
        <p>西柚</p>,
        <p>薄荷</p>
    ]      
    const reactSpan=(
        <span>              
            <p>{arr}</p>
        </span>
    )
    ReactDOM.render(reactSpan,reactDiv)   
</script>

函数组件

基本用法:

<div id="react-div"></div>
    
<script type="text/babel">
    const reactDiv=document.getElementById('react-div');
    //定义一个函数组件
    function HelloReact(){   //组件名(这里是函数名)的首字母必须大写
        return <div>
                    <h2>React组件:</h2>
                    <p>我是函数组件</p>
               </div>
    }
	ReactDOM.render(<HelloReact/>,reactDiv)    
</script>
/*
const reactSpan=(
	<span>
		<HelloReact/>
	</span>
)
ReactDOM.render(reactSpan,reactDiv)
*/

类组件

基本用法:

<div id="react-div"></div> 
//定义类:必须是React.Component类的子类
class HelloReact extends React.Component{   //类名首字母必须大写
    render(){
        return <div>
                    <label>姓名:
                        <input type="text"/>
                    </label>
               </div>
    }
}
//组件渲染
ReactDOM.render(<HelloReact/>,document.getElementById('react-div'));

虚拟DOM渲染过程

先构建一颗虚拟的DOM树,若树中的某一点发生了变化,只对虚拟DOM树进行局部更新,然后将虚拟的DOM渲染到实际的DOM中。

JSX虚拟DOM渲染为真实DOM的原理和步骤

(1)基于babel-preset-react-app把JSX语法变为React.createElement的模式;
(2)基于React.createElement方法执行创建出虚拟DOM对象(JSX对象);
(3)基于ReactDOM.render把创建的虚拟DOM对象渲染到页面指定的容器中(变为真实DOM)。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:44:30  更:2021-11-16 18:45:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 11:41:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码