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. Big-Yellow的算法工程师进阶之路

    Big-Yellow的算法工程师进阶之路 一.基础算法 二.基础数据结构 2.1 链表[1] 2.1.1 基础理论 链表是一种以链的形式来存储数据的数据结构.链表的结构:每一个数据都与其后一个数据相连 ...

  2. window.open代理劫持

    window.open = new Proxy(window.open, { apply(target, ctx, args) { if (hasAuth(args[0])) { return tar ...

  3. 来自 AI Secure 实验室的 LLM 安全排行榜简介

    近来,LLM 已深入人心,大有燎原之势.但在我们将其应用于千行百业之前,理解其在不同场景下的安全性和潜在风险显得尤为重要.为此,美国白宫发布了关于安全.可靠.可信的人工智能的行政命令; 欧盟人工智能法 ...

  4. $event - vue中默认参数的显示 - @on-change="func($event, code)" - 基础知识

    @on-change="checkAllOnChangeHandle($event,scItem.code)"

  5. python3中print()函数打印多个变量值

    第一种方法: print("变量1", file_name, "变量2", new_name) print("变量1", file_name ...

  6. maven解决尝试手段

    发现原来用的buildBody不好用,百度这个请求有异于其他sdk 关于写身份证接口那边:首先报有两个slf4j冲突,经过查阅,不能包含两个slf4j遂写了exclusion,但是排除不了,要使用** ...

  7. 菜鸟角度简单分析BP算法(Error Back Propagation)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. 【2302. 统计得分小于 K 的子数组数目】前缀和+二分

    class Solution { public static void main(String[] args) { Solution solution = new Solution(); soluti ...

  9. 云VR:虚拟现实专业化的下一步

    传统的VR通常需要功能强大的计算机和其他高性能设备来提供良好的用户体验.但是,如果有一种方法可以从任何设备和任何地方处理VR内容呢?这就是云VR对VR用户的承诺.随着5G和其他网络的到来,VR技术的未 ...

  10. python基础六(函数基础及参数使用)

    一. 函数定义 1.什么是函数 函数就相当于具备某一功能的工具 函数的使用必须遵循一个原则: 先定义 后调用2.为何要用函数 代码冗余,程序的组织结构不清晰,可读性差 可维护性.扩展性差3.如何用函数 ...