精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大家都能看得懂的源碼之 Ahooks 整體架構篇

開發 架構
peerDependencies? 的目的是提示宿主環境去安裝滿足插件 peerDependencies? 所指定依賴的包,然后在插件 import? 或者 require? 所依賴的包的時候,永遠都是引用宿主環境統一安裝的 npm 包,最終解決插件與所依賴包不一致的問題。這里的宿主環境一般指的就是我們自己的項目本身了。

本文是深入淺出 ahooks 源碼系列文章的第一篇,這個系列的目標主要有以下幾點:

  • 加深對 React hooks 的理解。
  • 學習如何抽象自定義 hooks。構建屬于自己的 React hooks 工具庫。
  • 培養閱讀學習源碼的習慣,工具庫是一個對源碼閱讀不錯的選擇。

注:本系列對 ahooks 的源碼解析是基于 v3.3.13。自己 folk 了一份源碼,主要是對源碼做了一些解讀,可見 詳情[1]。

第一篇主要介紹 ahooks 的背景以及整體架構。

React hooks utils 庫

自從 React 16.8 版本推出 React hooks,越來越多的項目使用 Function Component。React hooks utils 庫隨即誕生,它主要解決的兩個問題如下:

  • 公共邏輯的抽象。
  • 解決 React hooks 存在的弊端,比如閉包等。

那現在社區有哪些比較優秀的 React Hooks utils 庫呢?

react-use[2] 是社區比較活躍的 React hooks utils 庫,它的 star 數達到了 29.6k。它的功能非常強大,擁有的 hooks 已經 100+。假如你需要功能比較齊全,可以考慮選擇 react-use。

如果不需要非常齊全的功能,只需要一些常見的功能,react-use 可能會稍微冗余了,可以考慮我們今天的主角——ahooks[3],目前它的 star 數為 9.2k,也算是社區比較活躍。

ahooks

簡介

官方介紹如下:

ahooks,發音 [e? h?ks],是一套高質量可靠的 React Hooks 庫。在當前 React 項目研發過程中,一套好用的 React Hooks 庫是必不可少的,希望 ahooks 能成為您的選擇。

特點

它具有如下特點:

  • 易學易用。
  • 支持 SSR。

將訪問 DOM/BOM 的方法放在 useEffect 中(服務端不會執行),避免服務端執行時報錯。

源碼中可以看到很多isBrowser 的判斷,主要是區分開瀏覽器環境和服務器環境。

  • 對輸入輸出函數做了特殊處理,且避免閉包問題。

輸入的函數,永遠都是使用最新的一份。這個是通過 useRef 進行實現。

輸出函數,地址都是不會變化的,這個是通過 useMemoizedFn(ahooks 封裝的)實現的,其實現也是通過 useRef 實現。后面我們會提到。

  • 包含大量提煉自業務的高級 Hooks。
  • 包含豐富的基礎 Hooks。
  • 使用 TypeScript 構建,提供完整的類型定義文件。可以學習一些 TypeScript 的技巧。

hooks 種類

ahooks 基于 UI、SideEffect、LifeCycle、State、DOM 等分類提供了常用的 Hooks。如下所示:

圖片

ahooks 整體架構

項目啟動

我們先從 ahooks 中 folk 一份[4],clone 下來。

yarn run init
yarn start

如果你能成功跑起服務,就會看到和官方文檔一模一樣的頁面。

整體結構

從倉庫的根目錄的 package.json 中可以得到以下信息。

  • 文檔是使用dumi。是一款為組件開發場景而生的文檔工具。
  • 該項目是一個monoRepo。它的項目管理是通過lerna[5]進行管理的。
  • 單元測試是通過 jest 實現。

它的目錄結構中,可以看到 docs 中存放倉庫公共文檔。packages 中存放兩個包,hooks 和 use-url-state。整體的結構跟 dumi 中給出的 lerna 項目的結構相似。其中每個包下面的每個組件都可以書寫對應的文檔,不一樣的是,hooks 中每個組件多了 __tests__ 文件夾,這個是用來寫單元測試的。

圖片

跟 hooks 相似的組織形式

可以用以下一張圖,大致總結一下 ahooks 的工程架構:

圖片

hooks

剛剛也提到,ahooks 是采用了 monoRepo? 的方式,我們的源碼都是在 packages 中,我們來看下 hooks。先看 packages/hooks/package.json?。另外要使用 useUrlState 這個 hook,需要獨立安裝 @ahooksjs/use-url-state?,其源碼在 packages/use-url-state 中。我理解官方的用意應該是這個庫依賴于 react-router,可能有一些項目不需要用到,把它提出來有助于減少包的大小。

npm i @ahooksjs/use-url-state -S

回到 packages/hooks。重點關注一下 dependencies 和 peerDependencies。可以看到其實它內部還是使用了一些其他的工具庫的,比如 lodash(估計是避免重復造輪子,但感覺這樣會導致包會變大)。后面我們也會對這些工具庫做一個探索。

"dependencies": {
"@types/js-cookie": "^2.x.x",
"ahooks-v3-count": "^1.0.0",
"dayjs": "^1.9.1",
"intersection-observer": "^0.12.0",
"js-cookie": "^2.x.x",
"lodash": "^4.17.21",
"resize-observer-polyfill": "^1.5.1",
"screenfull": "^5.0.0"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},

另外解釋下 peerDependencies。

peerDependencies? 的目的是提示宿主環境去安裝滿足插件 peerDependencies? 所指定依賴的包,然后在插件 import? 或者 require? 所依賴的包的時候,永遠都是引用宿主環境統一安裝的 npm 包,最終解決插件與所依賴包不一致的問題。這里的宿主環境一般指的就是我們自己的項目本身了。

這對于封裝 npm 包非常重要。當你寫的包 a 里面依賴另一個包 b,而這個包 b 是引用這個包 a 的業務的常用的包的時候,建議寫在 peerDependencies 里,避免重復下載/多個版本共存。

總結

作為系列的第一篇,介紹了 React hooks utils 庫的背景以及 ahooks 的特點簡介和整體架構,接下來會探索各個常見的 hooks 方法實現,敬請期待。

參考

ahooks 正式發布:值得擁抱的 React Hooks 工具庫[6]。

參考資料

[1]詳情: https://github.com/GpingFeng/hooks

[2]react-use: https://github.com/streamich/react-use

[3]ahooks: https://ahooks.js.org/zh-CN/guide

[4]一份: https://github.com/GpingFeng/hooks

[5]lerna: https://www.lernajs.cn/

[6]ahooks 正式發布:值得擁抱的 React Hooks 工具庫: https://developer.aliyun.com/article/768059?

責任編輯:武曉燕 來源: 前端雜貨鋪
相關推薦

2022-08-16 21:01:56

runAsyncreload數據

2020-03-17 19:39:50

區塊鏈區塊鏈技術

2024-12-18 18:53:48

2015-12-15 14:08:31

2015-10-10 11:43:19

數據漫畫人才

2022-01-20 08:49:24

OTDR光纖

2020-05-06 09:10:08

機器學習無監督機器學習有監督機器學習

2018-01-08 14:24:32

程序員段子工程師

2023-02-26 08:42:10

源碼demouseEffect

2019-12-25 09:02:48

HTTPSHTTP安全

2018-09-03 11:50:25

編程語言源碼框架

2021-11-18 08:09:40

Python爬蟲Python基礎

2021-01-11 16:19:45

MySQL數據庫服務器

2016-12-19 11:17:48

架構 MVC

2014-06-24 10:24:53

程序員笑話

2020-09-28 14:25:39

HTTPS加密算法

2016-10-24 14:42:19

云計算公有云私有云

2025-03-10 12:06:46

2016-11-25 13:14:50

Flume架構源碼
點贊
收藏

51CTO技術棧公眾號

7777奇米亚洲综合久久| 国产一区二区三区网站| 日日摸日日碰夜夜爽无码| 欧美性猛交 xxxx| 美女国产一区| 久久亚洲综合国产精品99麻豆精品福利| www.51色.com| 日韩激情电影免费看| 亚洲国产精品99久久久久久久久| 91精品综合久久久久久五月天| 国产亚洲欧美久久久久| 国产成人三级| 欧美成人一区二区| 日韩一级片播放| 欧美寡妇性猛交xxx免费| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 性色av一区二区三区免费| 国产精品密蕾丝袜| 2021年精品国产福利在线| 91激情五月电影| 男人日女人视频网站| 春暖花开成人亚洲区| 成人永久免费视频| 成人免费网站在线观看| 国产精品第5页| 欧美女人交a| 中文字幕在线看视频国产欧美在线看完整 | 深夜福利亚洲导航| 噜噜噜在线视频| 1204国产成人精品视频| 欧美日韩精品免费观看视频| av免费播放网址| 91超碰在线免费| 亚洲特级片在线| 日韩一区不卡| 欧美高清成人| 91免费观看视频| 国产乱码精品一区二区三区日韩精品 | 久久精品欧洲| 91国产精品电影| 欧美色图亚洲天堂| 亚洲国产精品成人| 久久精品视频播放| 女性裸体视频网站| 成人嘿咻视频免费看| 亚洲久久久久久久久久久| 朝桐光av一区二区三区| 国产福利一区二区精品秒拍| 日韩视频中午一区| 欧美污在线观看| 久久的色偷偷| 91精品婷婷国产综合久久性色 | 亚洲欧美资源在线| 中文字幕精品视频在线| 精品国产影院| 亚洲激情在线观看| xxxx黄色片| 奇米影视777在线欧美电影观看 | h网站在线免费观看| 国产丝袜在线精品| 亚洲第一在线综合在线| 91xxx在线观看| 亚洲欧美中日韩| 中文字幕免费在线不卡| 黄色网页在线播放| 一区二区在线看| 成人在线播放网址| 变态调教一区二区三区| 精品成人久久av| 97视频在线免费播放| 国产精品字幕| 欧美美女网站色| 亚洲911精品成人18网站| 东京久久高清| 亚洲桃花岛网站| 永久av免费网站| 欧美三级网页| 欧美专区福利在线| 一本久道久久综合无码中文| 国产精品综合二区| 黄色国产精品一区二区三区| 噜噜噜在线观看播放视频| 中文字幕一区二区视频| 大地资源网在线观看免费官网| 黑人精品视频| 91精品办公室少妇高潮对白| 五月天婷婷在线观看视频| 999国产精品一区| 亚洲精品在线视频| 中国一级片在线观看| 伊人久久综合| 国产精品精品国产| 亚洲精品国产av| 久久精品免费在线观看| 日本久久高清视频| 伊人久久综合一区二区| 在线91免费看| 人妻体内射精一区二区三区| 精品免费在线| 久久久久久久久综合| 天天操天天干天天摸| 国产精品羞羞答答xxdd| 欧美一区少妇| 欧美家庭影院| 欧美色大人视频| 超碰caoprom| 五月久久久综合一区二区小说| 97在线观看视频| 国产口爆吞精一区二区| 久久久欧美精品sm网站| 国产91在线亚洲| 欧美国产日韩电影| 亚洲成人动漫在线播放| av资源在线免费观看| 99国产精品99久久久久久粉嫩| 国产拍精品一二三| 免费看男男www网站入口在线| 亚洲色图欧美偷拍| 亚洲中文字幕无码一区二区三区| 高h视频在线播放| 欧美一区二区大片| 青青操在线播放| 天堂在线亚洲视频| 久久青青草综合| gogo久久| 日韩欧美一级精品久久| 亚洲欧美综合7777色婷婷| 亚洲一区国产| 精品国产乱码久久久久久久软件| 中文字幕伦理免费在线视频 | 污视频在线免费| 亚洲男同性恋视频| www,av在线| 久久精品99久久无色码中文字幕| 欧美最顶级的aⅴ艳星| 欧美亚洲精品在线观看| 亚洲五码中文字幕| 韩国三级在线看| 国产精品hd| 91久久国产自产拍夜夜嗨| 秋霞a级毛片在线看| 欧洲日韩一区二区三区| 国产精品一二三区在线观看| 亚欧美中日韩视频| 蜜桃导航-精品导航| 人在线成免费视频| 日韩久久精品成人| 国产精品suv一区| 久久精品亚洲麻豆av一区二区 | 超碰10000| 久久久久毛片免费观看| 九九精品在线观看| 亚洲AV无码精品自拍| 一区二区日韩电影| 中文字幕第3页| 国产精品毛片在线| 欧洲亚洲一区| 国产亚洲精品精品国产亚洲综合| 国产亚洲成精品久久| 中文无码av一区二区三区| 国产亚洲女人久久久久毛片| 免费观看成人在线视频| 欧美亚洲精品在线| 成人亚洲激情网| 四虎av在线| 亚洲精品美女在线观看| 中文字幕在线观看视频免费| 国产婷婷一区二区| 精品国产乱码久久久久久1区二区| 91精品国偷自产在线电影 | 亚洲精品一区二区口爆| 欧美日韩视频在线| 蜜桃传媒一区二区亚洲| 精品在线观看免费| 国产一区二区三区小说| 日韩极品在线| 国产精品爽爽爽| 午夜成年人在线免费视频| 亚洲第一黄色网| 怡红院av久久久久久久| 亚洲视频狠狠干| 97香蕉碰碰人妻国产欧美| 久久一二三区| 三年中国中文在线观看免费播放| 亚洲一区二区三区免费| 国产成人精品午夜| 影音先锋在线视频| 亚洲女成人图区| 国产人妖一区二区| 欧美日韩一区二区三区在线免费观看| 人妻少妇无码精品视频区| 国产一区高清在线| 波多野结衣50连登视频| 亚洲国产成人精品女人| 久久综合一区| 久久9999免费视频| 日韩av免费在线| 免费污视频在线| 丝袜一区二区三区| 午夜18视频在线观看| 6080午夜不卡| 亚洲成熟少妇视频在线观看| 亚洲精品乱码久久久久久| 色哟哟精品观看| 粉嫩一区二区三区性色av| 九九九在线观看视频| 亚洲毛片播放| 9191国产视频| 日韩欧美视频专区| 欧美日韩精品一区| 国产精品久久久网站 | 久久久久毛片免费观看| 国产精品久久久亚洲| 偷拍自拍在线看| 欧美国产乱视频| 色大18成网站www在线观看| 日韩精品久久久久久福利| 精品国产乱码久久久久久蜜臀网站| 色婷婷激情一区二区三区| 日本特黄特色aaa大片免费| 亚洲日本在线a| 黄大色黄女片18免费| 91论坛在线播放| 国产日韩视频一区| 国产精品一二三四五| 亚洲欧美日韩综合网| 久久中文在线| 欧美 日韩精品| 久久99伊人| 国产免费黄视频| 在线观看一区视频| 日韩免费在线观看av| 66久久国产| 国产四区在线观看| 天天射—综合中文网| 五月天久久综合网| 精品成人影院| 久久久婷婷一区二区三区不卡| av成人综合| 成人在线视频电影| 日韩08精品| 99在线观看| 亚洲三级av| 99精品国产一区二区| 亚洲精品福利| 99三级在线| 999精品视频在这里| 国产一区二区视频在线免费观看| 国产亚洲精品美女久久| 黑人巨大精品欧美一区二区小视频| 2023国产精华国产精品| 国产一区二区三区无遮挡| 香蕉久久精品| 欧美精品一区在线| 激情综合网站| 亚洲午夜在线观看| 中文精品久久| 日韩久久久久久久久久久久| 亚洲视频中文| 国产中文字幕在线免费观看| a91a精品视频在线观看| 久久精品香蕉视频| 日韩av中文在线观看| 天天干天天爽天天射| 国产一区日韩二区欧美三区| 佐佐木明希电影| 97精品国产97久久久久久久久久久久 | 正在播放欧美一区| 欧美jizz18hd性欧美| 欧美精品在线播放| 国产白浆在线免费观看| 国产激情久久久久| 电影一区二区三区久久免费观看| 91入口在线观看| 日韩欧美美女在线观看| 午夜精品亚洲一区二区三区嫩草 | 欧美日韩国产成人高清视频| 24小时免费看片在线观看| 全亚洲最色的网站在线观看| 成人免费毛片嘿嘿连载视频…| 成人免费网站在线观看| 久久99偷拍| 亚洲一二三区精品| 亚洲精选成人| 五月激情婷婷在线| 成人一区二区视频| 在线看片中文字幕| 一区二区三区在线观看国产| 国产尤物在线视频| 3atv一区二区三区| 色视频在线观看| 久久精品中文字幕电影| 日韩脚交footjobhd| 91免费版网站入口| 伊人成综合网伊人222| 国产麻豆电影在线观看| 一区二区三区导航| 久久婷婷中文字幕| 国产亚洲一区二区三区四区 | 91黄视频在线| 亚洲精品综合久久| 自拍亚洲一区欧美另类| 98色花堂精品视频在线观看| 国产狼人综合免费视频| 欧美绝顶高潮抽搐喷水合集| 午夜啪啪免费视频| 久久www成人_看片免费不卡| 美女被艹视频网站| 国产欧美日韩视频在线观看| 久久中文字幕在线观看| 欧美日韩激情一区二区三区| 午夜视频1000| 九九热这里只有精品免费看| 99久久er| 欧美激情第六页| 综合天天久久| 男人的天堂最新网址| 国产丝袜欧美中文另类| 日本午夜视频在线观看| 日韩欧美成人午夜| 麻豆传媒视频在线观看免费| 日本午夜人人精品| 欧美黑白配在线| 国产免费一区二区视频| 国产综合久久久久影院| 影音先锋男人看片资源| 91黄色在线观看| 精品久久av| 4438全国亚洲精品在线观看视频| 99久久免费精品国产72精品九九| 一区二区三区久久网| 日本视频在线一区| 成人国产精品久久久网站| 欧美香蕉大胸在线视频观看 | 一区二区欧美亚洲| 自拍在线观看| 蜜桃传媒视频麻豆第一区免费观看| 亚洲三级影院| 国产精品成人99一区无码| 亚洲国产成人av| 亚洲产国偷v产偷v自拍涩爱| 久热精品在线视频| 欧美日韩午夜电影网| 超碰人人爱人人| 国产成人综合亚洲网站| 免费一级黄色大片| 精品国产乱码91久久久久久网站| 丝袜综合欧美| 国产在线精品一区| 亚洲在线日韩| 一区二区精品免费| 欧美三级日韩三级| 老司机av在线免费看| 亚洲一区二区三区成人在线视频精品| 欧美oldwomenvideos| √天堂资源在线| 亚洲综合成人在线视频| 天天干天天爽天天操| 人体精品一二三区| 欧美日韩激情在线一区二区三区| 自拍偷拍 国产| 国产精品久久二区二区| 99精品免费观看| 久久久久久久国产| 香蕉久久精品| 日韩一区二区三区不卡视频| 1区2区3区欧美| 亚洲精品久久久久久久久久| 亚洲91精品在线观看| 欧美日韩国产高清电影| 亚洲精品视频三区| 亚洲一卡二卡三卡四卡| 久热av在线| 成人免费看片视频| 亚洲国产日韩欧美一区二区三区| 亚洲欧美视频在线播放| 欧美图片一区二区三区| 91麻豆国产福利在线观看宅福利| 国产一区二区三区无遮挡 | 日韩欧美国产高清91| eeuss影院在线观看| 97人人模人人爽视频一区二区| 99精品免费| 三级黄色录像视频| 亚洲福利在线观看| 国产精品伊人| 国产视频一视频二| 国产精品久久久久7777按摩| 亚洲精品视频专区| 国产精品免费在线免费| 亚洲视频高清| 天美传媒免费在线观看| 亚洲大胆人体视频| 国产成人精品一区二区三区视频 | heyzo高清国产精品| 日韩av在线电影观看| 成人手机电影网| 一二三四区在线| 欧美最猛性xxxxx(亚洲精品)| 亚洲综合专区|