最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于vue3默認(rèn)把所有onSomething當(dāng)作v-on事件綁定的思考

 更新時(shí)間:2020年05月15日 08:35:12   作者:Jokcy  
這篇文章主要介紹了關(guān)于vue3默認(rèn)把所有`onSomething`當(dāng)作`v-on`事件綁定的思考,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

最近在重新看vue3的rfcs,發(fā)現(xiàn)一個(gè)細(xì)節(jié),原話如下:

props that start with on are handled as v-on bindings, with everything after on being converted to all-lowercase as the event name (more on this below)

也就是說(shuō),以后如果你在傳遞props的時(shí)候,以 on 開(kāi)頭的props,如果在組件上沒(méi)有做props的聲明,那么會(huì)被當(dāng)作事件綁定到組件的根節(jié)點(diǎn)上。

究其原因,我大致概括了兩點(diǎn):

  • 兼容vue2中的v-on.native
  • vue3的vnode聲明把props拍平了,為了區(qū)分事件和其他props,就統(tǒng)一把所有的on開(kāi)通的props默認(rèn)作為事件綁定

為此,我開(kāi)了一個(gè)issue來(lái)討論這個(gè)問(wèn)題,issue地址 。我關(guān)心的主要有兩點(diǎn):

  • 這是對(duì)functional component的嚴(yán)重限制
  • 是否會(huì)導(dǎo)致一些令人括困惑的誤解

先講第一點(diǎn)

vue3中可以直接通過(guò) function() {} 來(lái)聲明函數(shù)組件了,這是一個(gè)便利性的非常大的提升。在以前,你要聲明組件,你必須要:

{
  functinal: true,
  props: {},
  render() {}
}

這最大的提升來(lái)自不需要聲明props,為什么說(shuō)這是提升,因?yàn)檫@讓我們開(kāi)發(fā)HOC變得更方便了。現(xiàn)在我們可以通過(guò) ...rest 的方式把HOC不關(guān)心的props直接向下傳遞了。

但是現(xiàn)在因?yàn)檫@個(gè)默認(rèn)限制,我們不得不在HOC中聲明所有可能的他要擴(kuò)展的組件以 on 開(kāi)頭的props。舉個(gè)例子,我們有如下組件:

{
  props: {
    name: String,
    onChange: Function
  }
}

而我們的HOC的功能是在 name 前面加上 prefix ,對(duì)于這個(gè)HOC我們需要關(guān)心的只是 name 和他自己的props: prefix 。所以他的聲明應(yīng)該如下:

{
  props: {
    name: String,
    prefix: String
  }
}

然后在render中他可以這么做:

{
  render() {
    const {name, prefix, ...rest} = props
    return <WrapperedComponent name={`${prefix}-${name}`} {...rest} />
  }
}

也就是對(duì)于HOC來(lái)說(shuō),他是不需要關(guān)心他擴(kuò)展的組件其他的props的,但是在這種情況下,如果我們不在HOC中聲明,那么在使用的時(shí)候傳入的 onChange 會(huì)自動(dòng)綁定到root節(jié)點(diǎn),而不是作為props傳遞下去。

第二點(diǎn):令人困惑的使用

舉個(gè)例子,如果我有一個(gè)組件:

{
  props: {
    onChange: Function
  },
  methods: {
    handleInput() {
      // do someting
      // 并且根據(jù)情況觸發(fā)`onChange`
    } 
  },
  render() {
    return <input onInput={this.handleInput} />
  }
}

很顯然我是想要封裝 input 的變化,在滿足某些條件的時(shí)候才對(duì)外拋出新的value。但是如果這個(gè)時(shí)候有人就是不看文檔,直接傳遞了 onInput ,那么這時(shí)候 input 事件會(huì)直接綁定到節(jié)點(diǎn)上,那么這也是可以觸發(fā)的。

如果我們的測(cè)試用例太少或者不仔細(xì),很可能反應(yīng)不過(guò)來(lái)他們的區(qū)別。這顯然是作為組件開(kāi)發(fā)者的我們不希望出現(xiàn)的,但我們又無(wú)法限制這種行為。

總結(jié)

不得不說(shuō),我在考慮這兩個(gè)問(wèn)題的時(shí)候是有一定的 React思維 在里面的。因?yàn)閭€(gè)人來(lái)說(shuō)我是比較喜歡React的API設(shè)計(jì)的,非常的簡(jiǎn)潔,其對(duì)于組件的使用也更趨于極致,就是一切皆組件(連 redirect 這樣的行為都定義成了組件)。

而vue是一直在跟隨react的,相信這點(diǎn)大家也不會(huì)否認(rèn)。vue3更新的hooks(Composition)API,Suspense等明顯是借鑒的React的概念。

但同時(shí)我又是很看好vue3的,我一直覺(jué)得vue2這樣的API設(shè)計(jì)以及 .vue 文件的開(kāi)發(fā)模式都是為了吸引中低級(jí)用戶而準(zhǔn)備的,甚至舍棄了一些高級(jí)API特性(比如HOC在vue中就很難實(shí)現(xiàn),并且普及率相當(dāng)?shù)停?/p>

而vue3的hooks API以及其對(duì)JSX的更好支持,還有更純粹的 functional component ,讓我一度看到了vue在工程方面更激進(jìn)的變化。

但是 v-on 的默認(rèn)行為,卻又是一次那么明顯的 替用戶做決定 的行為。其實(shí)要解決這個(gè)問(wèn)題很簡(jiǎn)單,可以完全不考慮 v-on ,把所有傳遞的參數(shù)作為props,如果組件開(kāi)發(fā)者真的要在根節(jié)點(diǎn)上綁定事件,他可以實(shí)現(xiàn)的時(shí)候綁定,我們不應(yīng)該在使用組件的場(chǎng)景下需要考慮在組件內(nèi)部的節(jié)點(diǎn)上做一些事情,這樣做的副作用實(shí)在太大了。

雖然目前看來(lái)尤老師會(huì)聽(tīng)取我的意見(jiàn)的可能性是非常小的,但我還是抱有一點(diǎn)簡(jiǎn)單的期望吧。

到此這篇關(guān)于關(guān)于vue3默認(rèn)把所有onSomething當(dāng)作v-on事件綁定的思考的文章就介紹到這了,更多相關(guān)vue3 onSomething當(dāng)作v-on事件綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue頁(yè)面離開(kāi)后執(zhí)行函數(shù)的實(shí)例

    vue頁(yè)面離開(kāi)后執(zhí)行函數(shù)的實(shí)例

    下面小編就為大家分享一篇vue頁(yè)面離開(kāi)后執(zhí)行函數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue3框架使用報(bào)錯(cuò)以及解決方案

    Vue3框架使用報(bào)錯(cuò)以及解決方案

    這篇文章主要介紹了Vue3框架使用報(bào)錯(cuò)以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue無(wú)限輪播插件代碼實(shí)例

    vue無(wú)限輪播插件代碼實(shí)例

    這篇文章主要介紹了vue無(wú)限輪播插件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用vue進(jìn)行Lodop打印的一些常用方法小結(jié)

    使用vue進(jìn)行Lodop打印的一些常用方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于使用vue進(jìn)行Lodop打印的一些常用方法,需要進(jìn)行打印功能,Lodop就是實(shí)現(xiàn)需求的插件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 詳解vue-flickity的fullScreen功能實(shí)現(xiàn)

    詳解vue-flickity的fullScreen功能實(shí)現(xiàn)

    這篇文章主要介紹了詳解vue-flickity的fullScreen功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 在vue中封裝方法以及多處引用該方法詳解

    在vue中封裝方法以及多處引用該方法詳解

    這篇文章主要介紹了在vue中封裝方法以及多處引用該方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue路由攔截器和請(qǐng)求攔截器知識(shí)點(diǎn)總結(jié)

    vue路由攔截器和請(qǐng)求攔截器知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給各位整理的是一篇關(guān)于vue路由攔截器和請(qǐng)求攔截器知識(shí)點(diǎn)總結(jié)文章,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • vue項(xiàng)目打包部署后默認(rèn)路由不正確的解決方案

    vue項(xiàng)目打包部署后默認(rèn)路由不正確的解決方案

    這篇文章主要介紹了vue項(xiàng)目打包部署后默認(rèn)路由不正確的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺談Vue單頁(yè)面做SEO的四種方案

    淺談Vue單頁(yè)面做SEO的四種方案

    Vue SPA單頁(yè)面應(yīng)用對(duì)SEO不友好,當(dāng)然也有相應(yīng)的解決方案,通過(guò)查找資料,大概有以下4種方法,本文就詳細(xì)的介紹一下
    2021-10-10
  • petite vue 基本使用指南示例小結(jié)

    petite vue 基本使用指南示例小結(jié)

    petite-vue 是為漸進(jìn)增強(qiáng)而優(yōu)化的另一種 Vue 發(fā)行版,它提供與標(biāo)準(zhǔn) Vue 相同的模板語(yǔ)法和反應(yīng)性心智模型,這篇文章主要介紹了petite vue 基本使用指南,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

五河县| 平顶山市| 莱芜市| 中卫市| 长春市| 京山县| 犍为县| 九江市| 旌德县| 论坛| 来凤县| 安龙县| 吉安市| 延寿县| 高雄县| 辽宁省| 高雄市| 临澧县| 惠州市| 育儿| 兴国县| 会泽县| 乌拉特中旗| 石河子市| 延津县| 邳州市| 常宁市| 油尖旺区| 福鼎市| 龙胜| 资中县| 荥经县| 仁布县| 台中市| 克拉玛依市| 吉水县| 鹤峰县| 湘乡市| 平湖市| 鲁山县| 德化县|