React横向技术整理

React 扩展

DOM、虚拟DOM

DOM (Document Object Model,文档对象模型)定义了访问和操作文档的标准方法。根据 W3C DOM 规范,DOM是一种与浏览器、平台、语言无关的接口,使得你可以访问页面其他的标准组件。

XML、HTML

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。

DOM树

DOM树的表示

根据文档对象模型(DOM),每个 HTML 标签都是一个对象。嵌套的标签是闭合标签的“子标签(children)”。标签内的文本也是一个对象。所有这些对象都可以通过 JavaScript 来访问,我们可以使用它们来修改页面。例如,document.body 是表示 <body> 标签。

自动修正

如果浏览器遇到格式不正确的 HTML,它会在形成 DOM 时自动更正它。
例如,顶级标签总是 <html>。即使它不存在于文档中 — 它也会出现在 DOM 中,因为浏览器会创建它。对于 <body> 也是一样。
例如,如果一个 HTML 文件中只有一个单词 “Hello”,浏览器则会把它包装到 <html><body> 中,并且会添加所需的 <head>,DOM 将会变成下面这样

节点类型

一共有 12 种节点类型。实际上,我们通常用到的是其中的 4 种:
document — DOM 的“入口点”。
元素节点 — HTML 标签,树构建块。
文本节点 — 包含文本。
注释 — 有时我们可以将一些信息放入其中,它不会显示,但 JS 可以从 DOM 中读取它

虚拟dom

virtual DOM 虚拟DOM,用普通js对象来描述DOM结构,因为不是真实DOM,所以称之为虚拟DOM。J
有以下好处。

  • 可以维护视图和状态之间的关系
  • 复杂视图情况下提升渲染性能
  • 虚拟DOM除了可以渲染成DOM节点,还可以渲染到其他平台如ssr(nuxt.js/next.js)、原生应用(weex/rn)、小程序等,增加了跨平台能力

jsx

JSX表示JavaScript XML,通过Babel转化为普通js代码。
react17后出现了新的jsx,不需要引入react也可以使用。
老的缺点是

  1. 要写jsx必须随时引入react
  2. React.createElement无法做一些优化

例如,老的jsx转化是

import React from 'react';
React.createElement('h1', null, 'Hello world');

// 由编译器引入(禁止自己引入!)
import {jsx as _jsx} from 'react/jsx-runtime';

function App() {
  return _jsx('h1', { children: 'Hello world' });
}

虚拟DOM库

snabbdom

snabbdom是一个简单而强大的虚拟DOM库,Vue使用了它。

virtual-dom

一个基于js的 DOM模型,支持元素创建、差异计算和补丁操作,以实现高效的重新渲染

抽象语法书AST

在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。 它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

用途

编辑器的错误提示、代码格式化、代码高亮、代码自动补全;
elint、pretiier 对代码错误或风格的检查;
webpack 通过 babel 转译 javascript 语法。
学会之后,可以写babel插件。

js的AST标准

  • estree - EcmaScript AST的标准;
  • shift - designed with transformation in mind, not compatible with estree;
  • babel - supports language features which is have not yet become a standard, but have a proposal.

JavaScript parsers:

  • esprima 第一代
  • acorn 用的多、快、稳定
  • espree based on acorn, used in eslint;
  • @babel/parser based on acorn, supports all new language features
  • shfit-ast parser produces Shift AST
  • typescript can parse JavaScript and TypeScript, producing it’s own AST format for this

分析

一般首先通过 词法分析 生成 token,之后再通过 语法分析( Parser )生成 AST。
可使用 astexplorer 查看语法结构。

关于 React

A JavaScript library for building user interfaces,React专注于UI层的实现,
React的特点是声明式的、基于组件的、learn once write anywhere。使用jsx语法模拟真实DOM的结构。React最大的优势就是可扩展性

React的逻辑封装

  • 高阶组件
  • Render Props
  • Hooks
  • context
  • 内部组件,内部类

基础使用

源码解析

性能优化

  • 类组件合理使用shouldComponentUpdate,使用PureComponent
  • 函数组件使用react.memo, useMemo,useCallBack等

More

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值