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

208 阅读3分钟

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

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天,学习了掘金视频课《前端入门——工具篇》第三节课程 “React的历史与应用” ,第四节课程 “React的设计思路” ,第五节课程 “React (hooks)的写法与 React 实现” ,第六节课程 “React 状态管理库与应用级框架科普” ,以下为本次的学习笔记:

React的历史与应用

  • 前端应用开发
  • 移动原生应用开发
  • 综合Election,进行桌面应用开发

2011年 Facebook在其 php 生态中,引入了 xhp 框架,首次引入了组合式组件的思想,启发了后来的 React 的设 计。 2010年 Jordan Walke创造了FaxJS,也就是后来的 React 原型。

2012年 创造在Facebook收购Instagram 后,该 FaxJS 项目在内部得到使用,Jordan Walke 基于 FaxJS 的经验,创造React。 2013年 React 正式开源,在 2013 JSConf 上 Jordan Walke 介绍了这款全新的框架。 2014年-今天 生态大爆发,各种围绕 React 的新工具/新框架开始涌现。

React的设计思路

UI编程痛点

  • 状态更新,UI不会自动更新,需要手动地调用DOM进行更新。
  • 欠缺基本的代码层面的封装和隔离,代码层面没有组件化。
  • UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell”。

组件化实现

  • 组件是组件的组合/原子组件
  • 组件内拥有状态,外部不可见
  • 父组件可将状态传入组件内部

React (hooks)的写法与 React 实现

useState

普通更新 / 函数式更新 state

useEffect

useEffet 我们可以理解成它替换了componentDidMount, componentDidUpdate, componentWillUnmount 这三个生命周期,但是它的功能还更强大。

有三种写法:

当数组为空 [ ],表示不会因为页面的状态改变而执行回调方法【即仅在初始化时执行,componentDidMount】,

当这个参数不传递,表示页面的任何状态一旦变更都会执行回调方法

当数组非空,数组里的值一旦有变化,就会执行回调方法

Hook

可以挂到React生命周期上去执行的一个函数(上文举例的useState, useEffect都是hook, 比如说useState时挂载到了onUpdate上,useEffect是挂载到了onMount上) (其它的hook基本上都是useState和useEffect的封装)

Hook的使用法则:不要在循环,条件或嵌套函数中调用Hook

问题

  • JSX不符合JS标准语法

  • 更新DOM

    • Dom操作是比较耗费性能的,特别是将整个页面的Dom删除,重新挂载上新的Dom,是非常耗费性能的,且用户体验很差的一个操作那我们可以对老的Dom结构和新的Dom结构算一个Diff,然后把不同的那部分替换上去,性能开销和用户体验都会好上不少但我们需要注意Diff算法不能太耗时,我们既希望计算出的Diff尽可能小,又计算Diff的时间尽可能短,我们需要在这两者之间取一个平衡
  • 虚拟DOM

    问题二虚拟Dom.jpg

React 状态管理库与应用级框架科普

将状态抽离到UI外部进行统一管理