React概述JSX语法及React组件

Posted 遥岑.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React概述JSX语法及React组件相关的知识,希望对你有一定的参考价值。

React概述

React是一个用于构建用户界面javascript,用来简化可视化界面的开发。
React主要用来写html页面,或构建Web应用。
它是基于JSX(JavaScript Xml)语法,可以和html、js混合书写。
核心是组件,可以实现用户界面的模块化开发,代码的复用率高、可维护性好。

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 -->

JSX不是标准的ECMAScript语法,它是ECMAScript的语法扩展
需要使用babel编译处理后,才能在浏览器环境中使用
在使用type = 'text/babel’替换type='text/javascript’属性后,浏览器内置的JavaScript解释器就不会解析script标签中的脚本代码,转而由babel.js进行解析,从而避免React代码与原生JavaScript代码发生混淆

  1. 创建DOM

createElement(元素名称,元素属性,元素的子节点)

  1. 进行DOM的渲染:ReactDOM.render(虚拟的DOM,实际的DOM)

React的虚拟DOM

实际的DOM:传统的HTML的UI设计,承载了数据的呈现和更新,浏览器在呈现DOM之前,要构建一棵DOM树,若该DOM树中的某一点发生了变化,就必须重新构建,对于复杂的DOM,若频繁的重建就会导致页面的性能下降。

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

虚拟DOM的优点:

减少DOM操作

  • 虚拟DOM可以将多次操作合并为一次操作(比如要添加100个节点)
  • 虚拟DOM借助DOM diff可以将多余的操作省掉,部分更新(比如只需要新增10个节点)

跨平台

  • 虚拟DOM不仅可以做DOM,还可以变成小程序、安卓应用,因为虚拟DOM本质上只是一个JS对象

虚拟DOM的缺点:

  • 需要额外的创建函数,像createElement这样,但它可以通过JSX来简化成XML写法

React的渲染原理

React渲染机制的基本原理就是:在DOM Tree的状态和属性发生改变后, 构造出新的虚拟DOM Tree。
通过Diff算法与原始的虚拟DOM Tree进行比较, 计算出变化的节点并进行更新操作。该算法的优势就是减少了对DOM的频繁重复操作,从而提升页面的访问性能。

执行过程

  1. 初次渲染时,React会根据初始state(Model),创建一个虚拟DOM对象(树)
  2. 根据虚拟DOM生成真正的DOM,渲染到页面中
  3. 当数据变化后(setState(),重新根据新的数据,创建新的虚拟DOM对象(树))
  4. 与上一次得到的虚拟DOM对象,使用diff算法对比,得到需要更新的内容
  5. 最后,React只将变化的内容更新(patch)到DOM中,重新渲染到页面

JSX简介

JSX是JavaScript XML的简写,表示在JavaScript代码中写XML(HTML)格式的代码。
这样的声明式语法更加的直观。

JSX语法的转化过程
JSX仅仅是createElement()方法的语法糖(简化语法)
通过React JSX方式定义的虚拟DOM,最终也会转换为通过createElement()方法实现虚拟DOM。
JSX语法被@babel/preset-react插件编译为createElement()方法。
React元素:虚拟DOM,是一个js对象,用来描述你希望在屏幕上看到的内容。

JSX语法

JSX的一般语法形式:

const element=(
		<tag-level-1>
		<tag-level-2>
		</tag-level-2>
		</tag-level-1>
);
  • element中必须有且只能有一个根标签
  • 允许<> </>作为根标签
  • JSX最好包裹在括号中

JSX的算术表达式:将表达式放在 '{ }'中

<p>{ 9+5 }</p>

JSX的条件表达式:使用条件运算符
在React JSX中使用JavaScript表达式无法使用if条件语句,但是可以使用条件运算符构成条件表达式来替代if条件语句。

<p>{9>5?'正是人间相逢时':'待到晴空月明日'}</p>

JSX嵌入表达式:先定义变量,使用’{ }'来引用变量

let name = '江絮'
<p>{ name }</p>

JSX的对象表达式:可以引用对象,支持’对象名.属性’格式

let obj = {
     name: '江絮',
     age:20,
     address:'长安'
}
<p>{obj.name}</p>

JSX的函数表达式:在’{ }'中调用函数

function show(user) {
     return user.name + user.age
}
<p>用户信息:{show(obj)}</p>

JSX的数组表达式:

let arr = [
    <p key='1'>山南山北雪晴</p>,
    <p key='2'>千里万里月明</p>
]
<p>{arr}</p>

JSX的样式表达式:

css1 : {
    fontSize:20,
    fontStyle:'bold',
    color:'pink'
}
<p style={css1}>遥岑</p>

JSX的注释表达式: { /* 注释的内容 */ }

{/*陪我长大的愿望 借给我半边翅膀*/}

React的组件

使用React就是在用组件
组件表示页面中的部分功能,组合多个组件实现完整的页面功能。
特点:可复用、独立、可组合。
React组件通过Props可以接受任意的输入值,Props也可以理解为参数的概念。

是基于ES6的语法,React组件可以分为:

  • 函数组件:通过ES5的函数实现
  • 类组件:通过ES6的类实现

函数组件

使用JS的函数(或箭头函数)创建的组件。

//函数组件
function FunComponet(){
    return (
        <p>我是函数组件</p>
    )
}
//渲染	
ReactDOM.render(<FunComponet />,htmlDiv);
  • 函数名称必须以大写字母开头 ,以此区分组件和普通的React元素
  • 函数组件必须有返回值,表示该组件的结构,返回值可以为null
  • 函数名作为组件标签名

类组件

使用ES6的class创建的组件。

//3.1 获取实际的DOM
const htmlDiv = document.querySelector('#root');

//3.2 创建类组件:类名首字母大写;类必须继承React.Component类
class HelloWorld extends React.Component {
    render(){
          return (
              <h3>西安邮电大学</h3>
          )
    }
}

//3.3 将类标签渲染到实际的DOM中
ReactDOM.render(<HelloWorld/>,htmlDiv);
  • 类名首字母大写
  • 类必须继承React.Component父类,从而可以使用父类中提供的方法或属性
  • 类组件必须提供render( )方法,render( )方法必须有返回值,表示该组件的结构

以上是关于React概述JSX语法及React组件的主要内容,如果未能解决你的问题,请参考以下文章

React概述JSX语法虚拟DOM及React组件

React的JSX语法及组件

React 简介 及 JSX语法

React入门概述 - 虚拟DOM与原生DOM - JSX语法 - React基本使用

React JSX语法说明

11.React原理及优化