0x1 React 的历史与应用

  1. 应用场景

    1. 前端应用开发,如 Meta、Ins、Netflix 的网页版
    2. 移动原生应用开发,如 Ins、Discord
    3. 结合 Electron 进行桌面应用开发
  2. 发展历史

    1. Facebook 引入了 xhp 框架,其组合式组件的思想启发了 React 的设计

    2. Jordan Walke 创造了 React 的原型—— FaxJS

      FaxJS 的四个特性:

      1. 既可在服务端渲染,也可在客户端渲染
      2. 响应式(Reactive):当状态变更时,其 UI 也会自动更新
      3. 高性能
      4. 结构化
    3. 在 Facebook 收购 Ins 后,Jordan Walke 创造了 React

0x2 React 的设计思路

单向数据流:父组件向子组件单向传递数据

  1. UI 编程痛点

    1. 状态更新时,UI 不会自动更新,需要手动调整
    2. 欠缺基本的代码层面的封装和隔离
    3. UI 之间的数据依赖关系需要手动维护
  2. 转换式与响应式

    1. 转换式:给定输入,求解输出。如:编译器

    2. 响应式:监听事件,消息驱动。如:监控系统

      响应式系统:

      graph LR
      A(事件)-->B(执行既定的回调)
      B-->C(状态变更)
      C--前端 UI-->D(UI 更新)
  3. 响应式编程

    1. 状态更新,UI 自动更新
    2. 前端代码组件化,可复用,可封装
    3. 状态之间的互相依赖关系,只需声明即可
  4. 组件化的特点

    1. 组件时组件的组合/原子组件
    2. 组件拥有的状态是外部不可见的
    3. 父组件可将状态传入组件内部
  5. 组件设计

    1. 组件声明了状态和 UI 的映射
    2. 组件有 Props[外部传入]/State[内部私有] 两种状态
    3. 组件可由其他组件拼装而成
  6. 组件代码结构

    1. 内部拥有私有状态 State
    2. 接受外部的 Props 状态提供复用性
    3. 根据当前的 Props/State 返回一个 UI

0x3 React (hooks)的写法

import React, { useState, useEffect } from 'react'
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `${count} times`;
})
return (
<div>
<p>You clicked { count } times</p>
<button onClick={ () => setCount(count+1) }>
Click me
</button>
</div>
);
}
  1. 在 React 中声明一个新状态时,需要手动调用 useState

  2. 对 useState 传入一个初始值后,返回一个状态

  3. 对 useEffect 传入一个函数和一个数组。数组是状态的数组,称作依赖项。“副作用”函数

    副作用:代表除了基础函数操作外,还可以进行网络请求、更新 DOM、存储数据等功能

0x4 React 的实现

  1. JSX/TSX 中的代码不符合 JS/TS 的标准

    • 通过转译成一般 JS/TS 代码
  2. 返回的 JSX 发生改变时如何更新 DOM

    • 虚拟 DOM(用于平衡 Diff 算法更少的更新次数更快的计算速度

      Diff 算法:

      • 替换不同类型的元素
      • 更新同类型的 DOM 元素
      • 递归同类型的组件元素
  3. Props/State 更新时要重新触发 render

0x5 React 状态管理库

  1. React 状态管理库

    将组件的状态从根节点中抽离出来,集中到 UI 外部统一管理,构成 React 状态管理库

    如:redux、xstate、mobx、recoil

  2. 状态机

    在当前状态下,接受外部事件后,迁移至下一个状态

0x6 应用级框架科普

  1. next.js——React 开发框架
  2. modern.js——全栈开发框架
  3. blitz——无 API 思想的全栈开发框架'

首发于响应式系统与 React | 青训营笔记

-End-

响应式系统与 React的更多相关文章

  1. 你是如何理解Vue的响应式系统的

    1.响应式系统简述: 任何一个 Vue Component 都有一个与之对应的 Watcher 实例. Vue 的 data 上的属性会被添加 getter 和 setter 属性. 当 Vue Co ...

  2. 前端必读:Vue响应式系统大PK(下)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/vue-3-reactivity-system ...

  3. vue原理探索--响应式系统

    Vue.js 是一款 MVVM 框架,数据模型仅仅是普通的 JavaScript 对象,但是对这些对象进行操作时,却能影响对应视图,它的核心实现就是「响应式系统」. 首先看一下 Object.defi ...

  4. Vue 及框架响应式系统原理

    个人bolg地址 全局概览 Vue运行内部运行机制 总览图: 初始化及挂载 在 new Vue()之后. Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周期. ...

  5. Vuejs - 深入浅出响应式系统

    Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 Javascript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接,不过理解其工作原理同样非常重要,这样 ...

  6. Vue的响应式系统

    Vue的响应式系统 我们第一次使用Vue的时候,会感觉有些神奇,举个例子: <div id="app"> <div>价格:¥{{price}}</di ...

  7. 【js】vue 2.5.1 源码学习 (七) 初始化之 initState 响应式系统基本思路

    大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化 ...

  8. 前端必读:Vue响应式系统大PK

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/vue-3-reactivity-system ...

  9. 一些vue 响应式系统的底层的细节

    当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/ ...

  10. Vue3响应式系统api 之 ref reactive

    reactive 接收一个普通对象然后返回该普调对象的响应式代理.等同于2.x的  Vue.observable() Vue3中响应数据核心是 reactive , reactive 中的实现是由 P ...

随机推荐

  1. 迈向现代化的.NET配置指北

    一.欢呼 .NET Standard 时代   我现在已不大提 .NET Core,对于我来说,未来的开发将是基于 .NET Standard,不仅仅是面向未来 ,也是面向过去:不只是 .NET Co ...

  2. RC4Drop算法的工作原理揭秘:加密技术的进步之路

    RC4Drop算法起源: RC4Drop算法是RC4算法的一种改进版本,旨在解决RC4算法在长时间加密过程中可能出现的密钥流偏置问题.RC4算法由Ron Rivest于1987年设计,是一种流密码算法 ...

  3. 前后端分离Ajax入门

    前后端分离之Ajax入门 一.概念 Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信 ...

  4. grep 第四天

    grep 第四天 1 使用grep 取 passwd 显示行数 grep -c '' /etc/passwd [root@master ~]# grep -c '' /etc/passwd 135 2 ...

  5. Java博客大汇总

    目录介绍 01.Java基础[30篇] 02.面向对象[15篇] 03.数据结构[27篇] 04.IO流知识[11篇] 05.线程进程[9篇] 06.虚拟机[12篇] 07.类的加载[7篇] 08.反 ...

  6. C# OpenCv 证件照换底色

    using OpenCvSharp; using System; using System.Collections.Generic; using System.Linq; using System.T ...

  7. ftp安装与配置 云服务器 CentOS7

    1.FTP的安装 #安装 yum install -y vsftpd #设置开机启动 systemctl enable vsftpd.service #启动 systemctl start vsftp ...

  8. GID:旷视提出全方位的检测模型知识蒸馏 | CVPR 2021

    论文提出的GID框架能够自动选择可辨别目标用于知识蒸馏,而且综合了feature-based.relation-based和response-based知识,全方位蒸馏,适用于不同的检测框架中.从实验 ...

  9. linux 禁用休眠,挂起,睡眠

    参照 https://www.cnblogs.com/minseo/p/13557947.html 禁用休眠前查看状态 systemctl status sleep.target suspend.ta ...

  10. arch linux安装并简单配置zsh

    1.安装zsh sudo pacman -S zsh 2.设置默认zsh 列出所有已安装shell chsh -l 要为您的用户设置一个默认值 chsh -s /full/path/to/shell ...