react原始碼解析14 手寫hooks

2022-09-09 17:33:39 字數 1840 閱讀 7300

1.開篇介紹和面試題

2.react的設計理念

3.react原始碼架構

4.原始碼目錄結構和除錯

5.jsx&核心api

6.legacy和concurrent模式入口函式

7.fiber架構

8.render階段

9.diff演算法

10.commit階段

11.生命週期

12.狀態更新流程

13.hooks原始碼

14.手寫hooks

15.scheduler&lane

16.concurrent模式

17.context

18事件系統

19.手寫迷你版react

20.總結&第一章的面試題解答

import react from "react";

import reactdom from "react-dom";

let workinprogresshook;//當前工作中的hook

let ismount = true;//是否時mount時

const fiber = ;

const dispatcher = (() => ,

memoizedstate: null,//當前state

next: null//下乙個hook

};if (!fiber.memoizedstate) else

workinprogresshook = hook;//記錄當前工作的hook

return workinprogresshook;

} function updateworkinprogresshook()

function usestate(initialstate) else

let basestate = hook.memoizedstate;//初始狀態

if (hook.queue.pending) while (firstupdate !== hook.queue.pending);//通過update的action計算state

hook.queue.pending = null;//重置update鍊錶

}hook.memoizedstate = basestate;//賦值新的state

return [basestate, dispatchaction.bind(null, hook.queue)];//usestate的返回

} return ;

})();

function dispatchaction(queue, action) ;

if (queue.pending === null) else

queue.pending = update;//更新queue.pending

ismount = false;//標誌mount結束

workinprogresshook = fiber.memoizedstate;//更新workinprogresshook

schedule();//排程更新

} let [count, setcount] = dispatcher.usestate(1);

let [age, setage] = dispatcher.usestate(10);

return (

<>

clicked times

setcount(() => count + 1)}> add count

age is

setage(() => age + 1)}> add age

);}function schedule()

schedule();

Vue原始碼解析06 手寫自己的Vue

最近一段時間一直在研究 vue 的原始碼,突然間想寫乙個乞丐的 vue 實現,為了理一下自己的思路,同時也作為乙個階段性的總結.vue 雙向繫結看這裡 vue2.0 1.0 雙向資料繫結簡單來說就是利用了 object.defineproperty 和觀察者模式對 data 資料進行資料劫持.廢話不...

React原始碼解析

距離第一篇 react原始碼解析 一 已經過去將近4個月的時間,由於是我第一次進行原始碼解析相關的寫作,思路和文筆還不夠成熟。一百多天以來,我基於讀者反饋反思這幾篇文章中的不足,同時也在不斷學習借鑑其他優秀作者的寫作方法和寫作思路。最終總結出對於自己的原始碼寫作來說,需要改進的幾點 1.示例 太多 ...

React原始碼剖析 手寫React合成事件機制

之前剖析過vue中的ast的實現和dom diff的實現。這裡來到react,說說react的事件機制 這裡通過原始碼抽離react事件處理核心,手寫react事件處理方法 不和原始碼完全一樣,當基本思路及實現流程相同 上 定義addevent方法為dom物件新增事件 引數1 需要繫結事件的dom節...