vue-hooks 鉤子

vue-hooks

最近尤大發(fā)布了一個(gè)最新的npm包:vue-hooks 魁蒜。 既喜且優(yōu)棺榔,真是一個(gè)悲傷的故事夫晌。 這個(gè)npm包是關(guān)于hook(鉤子)一個(gè)最新思路的探索,也是react團(tuán)隊(duì)前不久的首創(chuàng)....

hooks 是什么

Hook是react中得一項(xiàng)新功能提案曙博,可以讓開發(fā)人員在不編寫Class的情況下使用狀態(tài)和其他React功能。

// react版本
import { 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>
  );
}

關(guān)于react使用最新的hook怜瞒,視頻 中有詳細(xì)介紹父泳,不做過多敘述般哼,說回vue-hooks。

vue-hooks

在這里我們使用了鉤子函數(shù) useData ,以及 useComputed惠窄,并且通過一個(gè)全新的函數(shù) hooks 將兩個(gè)鉤子函數(shù)組裝后的數(shù)據(jù) data , double 返回蒸眠。下面的圖是一個(gè)通俗的寫法:

在這里插入圖片描述

對(duì)比下來,可以看到杆融,代碼整體的邏輯變化并不大楞卡,這正是它的牛逼之處。

其中有幾點(diǎn)注意事項(xiàng):

  1. 自由可選脾歇。開發(fā)者可以在現(xiàn)有的項(xiàng)目中蒋腮,隨意挑選幾個(gè)組件中來嘗試Hooks,而無需重寫任何現(xiàn)有代碼藕各。
  2. 100%向后兼容池摧。hooks不包含任何重大更改,與我們通俗寫法沒有任何區(qū)別
  3. 目前討論階段座韵。Hook目前處于alpha版本险绘,在收到社區(qū)反饋后將會(huì)發(fā)布vue-hooks的release版本。

鉤子不會(huì)取代你對(duì)Vue生命周期概念的了解誉碴。相反宦棺,Hooks為已經(jīng)知道的Vue概念還會(huì)提供更直接的API:props,refs黔帕。

說到這里代咸,很多同學(xué)可能對(duì) hooks 的用處還是有些懵,那么上一個(gè)有邏輯復(fù)雜的函數(shù)成黄,提問:

如果想要重用save方法呐芥,如何實(shí)現(xiàn)呢?

在這里插入圖片描述

動(dòng)機(jī)

Hook充斥了vue的整個(gè)周期奋岁,解決了其中各種看似無關(guān)的問題思瘟,在編寫和維護(hù)數(shù)以萬計(jì)的組件時(shí)遇到了這些問題。其實(shí)這一點(diǎn)闻伶,無論是在學(xué)習(xí)Vue滨攻,還是更喜歡使用具有類似組件模型的不同庫(kù),都可能會(huì)發(fā)現(xiàn)其中的一些雷同問題蓝翰。

1 在組件之間重用狀態(tài)邏輯很困難

Vue提供了將可重用行為“附加”到組件的方法mixin光绕。如果有的同學(xué)已經(jīng)使用Vue一段時(shí)間,可能非常熟悉它的優(yōu)點(diǎn)畜份,同時(shí)也了解到诞帐,context內(nèi)的狀態(tài),與mixin內(nèi)的context實(shí)際是完全無感爆雹,這樣才能做到方法重用停蕉。

但是mixin模式要求在使用它重構(gòu)組件時(shí)愕鼓,保持每一個(gè)使用到它的組件其中的data,computed等等屬性保持key的一致性谷徙,這在實(shí)際開發(fā)的過程中可以遵循拒啰,但是很難以維護(hù)。但這指出了一個(gè)更深層次的基本問題:Vue需要一個(gè)更好的原語(yǔ)來共享有狀態(tài)邏輯完慧。

使用Hook谋旦,就是為了可以從組件中提取現(xiàn)有狀態(tài)邏輯,以便可以獨(dú)立測(cè)試并重用屈尼。鉤子允許開發(fā)者在不更改組件層次結(jié)構(gòu)的情況下重用有狀態(tài)邏輯册着。這樣可以輕松地在許多組件之間或與社區(qū)共享Hook。

2 復(fù)雜的組件變得難以理解

我們經(jīng)常從開發(fā)簡(jiǎn)單組件開始脾歧,最終演變成無法管理的狀態(tài)邏輯和副作用的復(fù)雜組建甲捏。每個(gè)生命周期方法通常包含不相關(guān)邏輯的混合。

例如鞭执,組件可能會(huì)在 mounted 和 update 中執(zhí)行一些data屬性上的數(shù)據(jù)操作。但是兄纺,相同的 mounted 方法可能還包含一些不相關(guān)的邏輯大溜,比如設(shè)置事件偵聽器啊,比如初始化某個(gè)方法啊估脆,做一些額外的判斷啊等等钦奋。

這些相互關(guān)聯(lián)的代碼一旦被拆分,最終又組合在一個(gè)方法中疙赠。這就造成了錯(cuò)誤和屬性不一致付材。

在許多情況下,不可能將這些組件分解為較小的組件圃阳,因?yàn)闋顟B(tài)邏輯遍布整個(gè)地方厌衔。測(cè)試它們也很困難。這是許多人更喜歡結(jié)合使用 Vuex 這樣的狀態(tài)管理庫(kù)相結(jié)合的原因之一捍岳。但是葵诈,這通常會(huì)引入太多的抽象,導(dǎo)致開發(fā)時(shí)總是在不同的文件之間切換祟同,實(shí)際上就造成了重用組件變得更加困難。

為了解決這個(gè)問題理疙,Hooks的思路是將一個(gè)組件拆分為較小的函數(shù)晕城,而不是基于生命周期方法強(qiáng)制拆分。同時(shí)我們還可以選擇使用 Vuex 管理組件的本地狀態(tài)窖贤,以使其更具可預(yù)測(cè)性砖顷。

期待一下vue-hooks

--------------------------------文章對(duì)你有用贰锁,感謝隨手點(diǎn)個(gè)贊-------------------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滤蝠,隨后出現(xiàn)的幾起案子豌熄,更是在濱河造成了極大的恐慌,老刑警劉巖物咳,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锣险,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡览闰,警方通過查閱死者的電腦和手機(jī)芯肤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來压鉴,“玉大人崖咨,你說我怎么就攤上這事∮涂裕” “怎么了击蹲?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)婉宰。 經(jīng)常有香客問我歌豺,道長(zhǎng),這世上最難降的妖魔是什么芍阎? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任世曾,我火速辦了婚禮,結(jié)果婚禮上谴咸,老公的妹妹穿的比我還像新娘轮听。我一直安慰自己,他們只是感情好岭佳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布血巍。 她就那樣靜靜地躺著,像睡著了一般珊随。 火紅的嫁衣襯著肌膚如雪述寡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天叶洞,我揣著相機(jī)與錄音鲫凶,去河邊找鬼。 笑死衩辟,一個(gè)胖子當(dāng)著我的面吹牛螟炫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艺晴,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昼钻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掸屡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起然评,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤仅财,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后碗淌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盏求,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年贯莺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了风喇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缕探,死狀恐怖魂莫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爹耗,我是刑警寧澤耙考,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站潭兽,受9級(jí)特大地震影響倦始,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜山卦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一鞋邑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧账蓉,春花似錦枚碗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至箱玷,卻和暖如春怨规,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锡足。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工波丰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舶得。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓掰烟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媚赖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容珠插。關(guān)于...
    云之外閱讀 5,048評(píng)論 0 29
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,207評(píng)論 0 6
  • 構(gòu)建自己的Hook可以將組件邏輯提取到可重用的函數(shù)中惧磺。 當(dāng)我們學(xué)習(xí)使用`Effect Hook時(shí),我們從聊天應(yīng)用程...
    xiaohesong閱讀 1,962評(píng)論 0 0
  • volatile是一個(gè)和和const對(duì)應(yīng)的修飾符號(hào). 表示這個(gè)變量可能被某種不被編譯器控制的因素修改.比如操作系統(tǒng)...
    曹小恒閱讀 428評(píng)論 0 0
  • 事情已經(jīng)過去了很久很久捻撑,可能已經(jīng)面目全非了磨隘,我卻依然記得!我得對(duì)自己說顾患,過得快樂就好番捂,未來過得精彩就好,不用管那么...
    0f484bdf1288閱讀 256評(píng)論 0 0