他根本不懂React

搜集了部分React作者 Dan Abramov 对于React的看法。
就像网友对尤大说的:《他根本不懂Vue》

关于前辈很烦人的事

React

React是什么,将 React 作为 UI 运行时

class组件和函数式组件有何不同

React Hooks原理探究,慎看

React元素

React 元素并不是永远存在的 。它们总是在重建和删除之间不断循环着。

React 元素具有不可变性。例如,你不能改变 React 元素中的子元素或者属性。如果你想要在稍后渲染一些不同的东西,你需要从头创建新的 React 元素树来描述它。

因此React 需要决定何时更新一个已有的宿主实例来匹配新的 React 元素,何时该重新创建新的宿主实例。

JSX

JSX是一个 JavaScript 的语法扩展,有人称它为Javascript XML,它的最大优点就是灵活,因为其本质就是JS,JS灵活所以JSX也灵活。

在React中,JSX会被编译成就是React.createElement()

JSX与模板都是视图层的DSL,二者各有千秋,个人看来模板有约束,但是约束之中会有性能提升的空间,(Vue的模板complier可以针对点对点进行diff),而JSX很灵活,但是却很难做到这一点。

JSX与模板的讨论
关于Vue3.0的模板为什么性能完爆JSX

更新流程

什么是更新,其实就是使宿主UI与React最新的元素树保持一致,将 React 元素树映射到宿主树(DOM/PDF/IOS)。
当父组件通过 setState 准备更新时,React 默认会协调整个子树。因为 React 并不知道在父组件中的更新是否会影响到其子代,所以 React 默认保持一致性。
React会生成一颗新的元素树,并在新旧两棵树之间做协调(Diff)。
批量更新:更新时,React 会先触发所有的事件处理器,然后再触发一次重渲染以进行所谓的批量更新,这就是在事件中setState是异步的原因。

React Fiber

React Fiber 是什么?
这可能是最通俗的 React Fiber(时间分片) 打开方式
漫画解释React Fiber
Fiber与Hooks是如何结合的

Javascript 引擎是单线程运行的。 严格来说,Javascript 引擎和页面渲染引擎在同一个渲染线程,GUI 渲染和 Javascript执行 两者是互斥的。另外异步 I/O 操作底层实际上可能是多线程的在驱动。

在React16之前,React协调是同步的(Stack Reconcilation),一边Diff一般更新dom,如果大批量同步更新会长期占用浏览器进程,是用户感觉到卡顿。而引用React Fiber之后,协调任务变成了异步,或者说,变成了一个协程(Fiber Reconcilation)。
Fiber解决的不是性能问题,而是调度问题。
① 将VirtualDOM 的数据结构改成了链表,这样可以避免递归而改成遍历,模拟函数调用栈
② 将渲染分为两个阶段,Reconciliation协调阶段和提交阶段,其中对生命周期函数的影响较大,废弃了部分生命周期。而提交阶段(前)的生命周期只能调用一次,所以大部分副作用会留在提交阶段调用。

协调阶段可能被中断、恢复,甚至重做,⚠️React 协调阶段的生命周期钩子可能会被调用多次!, 例如 componentWillMount 可能会被调用两次。

③双缓冲:React会维护一颗WorkInProgressTree,WIP树就是一个缓冲,它在Reconciliation 完毕后一次性提交给浏览器进行渲染。它可以减少内存分配和垃圾回收,WIP 的节点不完全是新的,比如某颗子树不需要变动,React会克隆复用旧树中的子树
④副作用的收集和提交

Hooks

React Hook 最佳实践 – React Blog
重渲染问题React Hooks(四): immutable

useState

  1. useState的原理:为什么useState能把组件和state联系起来
  2. 函数式更新,意味着以函数的模式表达一个行为,让state来更新:setCount(c => c + 1)
  3. hooks 的 setState: 如果前后两次的 state 引用相等,并不会刷新组件,因此需要用户进行保证当深比较结果不等的情况下,浅比较结果也不等,否则会造成视图和UI的不一致。

useEffect

useEffect 完整指南

  1. 函数式组件用了闭包,所以组件内部的任何函数,包括事件处理函数和 effect,都是从它被创建的那次渲染中被「看到」的。(class组件和函数式组件有何不同
  2. useEffect 可以看成是渲染的一部分,或者是React数据流的一部分。因为每一次渲染都会有一个新的useEffect函数。
  3. 使用useReducer或者useRef获取state中的最新值以提供useEffect使用。
  4. 如果某些函数仅在effect中调用,你可以把它们的定义移到effect中。若该函数用到state(数据流),需要添加这个state到effect依赖项。再如果该函数还需要复用,最好放外面且用useCallback来包裹一层,再添加到依赖项。
  5. How to fetch data with React Hooks:你应该如何在React中请求数据。

useCallback

1.真正做到让函数参与到数据流,以props的形式传到子组件中,形成数据流,当callback中的函数变化时,props也会变化,这一点传统的class组件无法做到。

useRef

  1. 生成一个在组件生命周期共享的盒子,可以在盒子中存放dom或者其他属性(state)
  2. 而且对ref.current修改也不会引起组件渲染
  3. 更新 useRef 是 side effect (副作用),所以一般写在 useEffect 或 event handler 里
    useRef详细总结

 
 
 
 

      • to be continued
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354