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

这是我参与「第五届青训营 」笔记创作活动的第6天

一、本堂课重点内容:

  1. 前端应用开发历程
  2. 移动原生应用开发
  3. 结合Electron的桌面应用开发
  4. 响应式编程与转换式
  5. React 设计与实现 - 组件化、状态归属问题及生命周期
  6. React的实现
  7. React状态管理库-核心思想、推荐、状态机等

二、详细知识点介绍:

前置知识

  • HTML、CSS、JS基础
  • 基础的数据结构/算法知识
  • 会使用浏览器提供的DOM API来修改DOM。更新UI

React的设计思路

  1. 状态更新 UI不会自动更新。需要手动调用DOM进行更新
  2. 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
  3. UI之间的数据依赖关系,需要手动维护,如果依赖链路长。则会遇到“Callback Hell”
  • 响应式与转换式
    • 响应式系统
      • 事件->执行既定的回调->状态变更
    • 响应式编程
      • 状态更新 UI自动更新
      • 前端代码组件化、可复用、可封装
      • 状态之间的互相依赖关系,只需声明即可
    • 组件化
      • 组件是组件的组合/原子组件
      • 组件内拥有状态。外部不可见
      • 父组件可将状态传入组件内部
    • 组件设计
      • 组件声明了状态好UI的映射
      • 组件有Props/State两种状态
      • ”组件“可由其他组件拼装而成

React的实现

问题:

  • JSX不符合JS标准语法
  • 返回的JSX反生改变时,如何更新DOM
  • State/Props更新时,要重新触发render函数

React状态管理库

核心思想:将状态抽离到UI外部进行统一管理

状态机:当前状态,收到外部事件,迁移到下一个状态

应用级框架科普

  1. NEXT.JS

硅谷明星创业公司Vercel的React开发框架,稳定,开发体验好,支持Unbundled Dev,swC等其同样有Serverless一键部署平台帮助开发者快速完成部署。口号是”Lct’s Make Web Fastcr”

  1. MODERN.JS

字节跳动Web Infra团队研发的全栈开发框架内置了很多开箱即用的能力与最佳实践,可以减少很多调研选择工具的时间

  1. Blitz

无AP1思想的全栈开发框架.开发过程中无需写API调用与CRUD逻辑,适合前后端紧密结合的小团队项目

三、实践练习例子:

1
2
3
4
5
6
7
8
9
10
11
function Component(props) {
//props是父组件传入的状态
const { url } = props;
this.text='点击我';//状态
//返回一个“UT”
return (<div>
<SubComponent props={{color: 'red'}}></SubComponent>
<img src={url}></img>
<button>text</button>
</div>)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
import React, { useState } from react';
function Example() {
//Declare a new state variable,which we'll call "count"
const [count,setCount]useState(0);
return (
<div>
<p>You clicked {count}times</p>
<button onclick={()=setCount(count 1)}>
Click me
</button>
</div>
);
}
1
2
3
4
5
6
7
8
9
"use strict";
const Test = props => {
const {
url
} = props;
return /*PURE*/React.createElement("div", {className:"root"
},/*#PURE_*/React.createElement("img",{src:url
})):
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import React,useState,useEffect from react';
function Example() {
const [count,setCount]useState(0)
//Similar to componentDidMount and componentDidUpdate:
useEffect(()=> {
//Update the document title using the browser API
document.title You clicked ${count}times';
});
return (
<div>
<p>You clicked {count}times</p>
<button onclick={()=setCount(count 1)}>
Click me
</button>
</div>
);
}

四、课后个人总结:

  • React的实现是重难点
  • 状态管理库的应用和理解