React特性与简介

React


用于构建用户界面的 JavaScript 库

通过使用jsx创建虚拟DOM映射真实DOM来减少页面的重绘重排

虚拟DOM

以前操作dom的方式是通过document.getElementById()的方式

这样的过程实际上是先去读取html的dom结构,将结构转换成变量,再进行操作

而reactjs定义了一套变量形式的dom模型,一切操作和换算直接在变量中

这样减少了操作真实dom,性能相当高,和主流MVC框架有本质的区别,并不和dom打交道


JSX

React 使用 JSX 来替代常规的 JavaScript

JSX 是一个看起来很像 XML 的 JavaScript 语法扩展

jsx是一个表达式

在jsx里面可以使用 { } 引入一个表达式

在jsx当中节点属性要使用关键字时需要替换
class属性要写成className — className的绑定会覆盖原有的class属性
for属性要写成htmlFor — label标签的for属性替换成htmlFor

style的绑定可以是一个对象的值,遇到传统的需要-的样式改写成驼峰的形式(fontSize)

{ } 引入对象要注意不能是一个子节点

jsx当中 使用{/*} {*/}来注释代码

布尔值null undefined 在 { } 在界面中不渲染

如果 { } 引入的是一个数组 那么数组里面的内容就会依次渲染

如果 { } 数组的成员是jsx 那么就需要保证每个jsx根节点都要绑定一个key的属性等于一个唯一值
目的是提升react的工作效率

在jsx当中可以给节点绑定事件 绑定事件的方式为on+事件名(驼峰写法onInput)
它的值只能是函数 — 函数得到的第一个参数是event

定义虚拟DOM时 不要用引号

jsx中只能有一个根标签

标签必须闭合

标签首字母
若为小写 会将该标签转为html的同名元素
若大写会渲染对应的组件




diff算法


在React中使用JSX中如果在节点中放入一个数组 那么会自动遍历渲染到页面结构

此时循环生成的结构中必须需要key属性 值为一个唯一的值 为了列表的复用和重拍 提升性能

如果没有设置key 在遍历生成的结构发生改变时

React需要将修改前的虚拟DOM与修改后的虚拟DOM一一比对(1 --> 1 , 2 --> 2 …)

将需要修改的虚拟DOM修改后映射到真实DOM

如果设置了唯一的key属性 React进行虚拟DOM比对时会直接将key相同的虚拟DOM进行比对

修改后映射到真实DOM 提升渲染效率


React Fiber算法

在react 16之后发布的一种react 核心算法,React Fiber是对核心算法的一次重新实现,之前用的是diff算法。

在之前React中,更新过程是同步的,这可能会导致性能问题。

当React决定要加载或者更新组件树时,会做很多事

比如调用各个组件的生命周期函数,计算和比对Virtual DOM,最后更新DOM树

这整个过程是同步进行的,也就是说只要一个加载或者更新过程开始,中途不会中断。

因为JavaScript单线程的特点,如果组件树很大的时候,每个同步任务耗时太长,就会出现卡顿。

React Fiber的方法其实很简单——分片。

把一个耗时长的任务分成很多小片,每一个小片的运行时间很短

虽然总时间依然很长,但是在每个小片执行完之后,都给其他任务一个执行的机会

这样唯一的线程就不会被独占,其他任务依然有运行的机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值