成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

開發(fā) 前端
通常,我們通過(guò)在最外層包裹一層 div 來(lái)解決這個(gè)問(wèn)題,但這個(gè)div元素一般沒(méi)有啥使用,就是讓模板符合單根需求。

如果我們?cè)噲D創(chuàng)建一個(gè)沒(méi)有根節(jié)點(diǎn)的Vue模板,比如這樣:

  1. <template> 
  2.   <div>Node 1</div> 
  3.   <div>Node 2</div> 
  4. </template> 

我們就會(huì)收到編譯或運(yùn)行時(shí)錯(cuò)誤,因?yàn)槟0灞仨毦哂袉蝹€(gè)根元素。

通常,我們通過(guò)在最外層包裹一層 div 來(lái)解決這個(gè)問(wèn)題,但這個(gè)div元素一般沒(méi)有啥使用,就是讓模板符合單根需求。

  1. <template> 
  2.   <div><!--只是來(lái)包裝一下--> 
  3.     <div>Node 1</div> 
  4.     <div>Node 2</div> 
  5.   </div> 
  6. </template> 

這樣的方式通常問(wèn)題不在,但是在某些情況下,擁有多根模板是必要的。在本文中,我們來(lái)探討一下何時(shí)需要以及如何解決多根的問(wèn)題。

渲染數(shù)組

某些情況下,可能需要組件渲染子節(jié)點(diǎn)數(shù)組以包含在父組件中。

例如,一些CSS特性需要非常特殊的元素層次結(jié)構(gòu)才能正確工作,比如CSS grid或flex,不能在父元素和子元素之間使用包裝器。

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

還有一個(gè)問(wèn)題,在組件中添加包裝元素可能會(huì)導(dǎo)致渲染無(wú)效的HTML。例如,如果要構(gòu)建table,則表行必須僅具有用于子項(xiàng)的表單元格。

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

簡(jiǎn)而言之,單根需求意味著在Vue中將無(wú)法返回子元素的組件的設(shè)計(jì)模式。

Fragments

這個(gè)單根限制對(duì)于React也是一個(gè)問(wèn)題,但是它在版本16中提供了一個(gè)稱為[fragments][1]的功能。要使用它,只需要將多根模板包裝在特殊的React.Fragment元素中:

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

這將使子組件沒(méi)有多余包裝,還有一個(gè)簡(jiǎn)潔的短語(yǔ)法<>:

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

Vue中的 Fragments

那么 Vue 是否也會(huì)引入 fragments?這可能不會(huì)很快,原因是虛擬DOM差異算法依賴于具有單個(gè)根的組件。根據(jù)Vue貢獻(xiàn)者Linus Borg的說(shuō)法:

“允許 fragments 需要對(duì)[diffing]算法進(jìn)行重大更改…不僅要使其能夠正常工作,而且還必須使其具有高性能。…這是一項(xiàng)非常繁重的任務(wù)”

具有渲染功能的函數(shù)組件

函數(shù)組件沒(méi)有單根限制,因?yàn)樗鼈儾恍枰裼袪顟B(tài)組件那樣在虛擬DOM中進(jìn)行區(qū)分。這意味著,如果組件只需要返回靜態(tài)HTML,那么擁有多個(gè)根節(jié)點(diǎn)也沒(méi)什么問(wèn)題。

還有一個(gè)警告:我們需要使用渲染功能,因?yàn)関ue-loader當(dāng)前不支持多根功能([盡管對(duì)此進(jìn)行了討論][2])。

一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn)(Fragments)?

使用指令技巧

還可以使用一種簡(jiǎn)單的方法來(lái)繞過(guò)單根限制。就是使用自定義指令,首先我們先所包裹的元素刪除

之前的:

  1. <parent> 
  2.   <wrapper> 
  3.     <child/> 
  4.     <child/> 
  5.   </wrapper> 
  6. </parent> 

中間步驟:

  1. <parent> 
  2.   <wrapper/> 
  3.   <child/> 
  4.   <child/> 
  5. </parent> 

最終:

  1. <parent> 
  2.   <!-- 刪除 <wrapper/> --> 
  3.   <child/> 
  4.   <child/> 
  5. </parent> 

要使它正常工作有點(diǎn)棘手,這里可以使用由Julien Barbay寫的 [vue-fragments][3] 的插件。

vue-fragments

vue-fragments可以作為一個(gè)插件安裝到你的Vue項(xiàng)目中

  1. import { Plugin } from "vue-fragments"; 
  2. Vue.use(Plugin); 

該插件注冊(cè)了一個(gè)全局VFragment組件,將其用作組件模板中的包裝器,類似于React片段的語(yǔ)法:

  1. <template> 
  2.   <v-fragment> 
  3.     <div>Fragment 1</div> 
  4.     <div>Fragment 2</div> 
  5.   </v-fragment> 
  6. </template> 

我不確定這個(gè)插件在所有的用例中有多健壯——它看起來(lái)可能是脆弱的——但在我做的實(shí)驗(yàn)中,它工作得很好。

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2022-06-22 07:34:05

自增列MySQL

2022-08-31 06:37:34

Vue 3模板

2024-04-01 11:52:46

2023-09-14 08:46:50

ReactVue

2023-03-26 19:38:09

2023-01-03 12:30:25

架構(gòu)CPUGPU

2021-05-08 07:37:32

Vue 命名插槽

2023-04-02 13:46:26

人工智能OpenAI漏洞

2020-10-13 10:49:23

APPAndiroid終端

2013-06-05 10:24:22

2017-08-11 17:55:48

前端JavaScript模板引擎

2017-03-20 17:59:19

JavaScript模板引擎

2017-03-15 08:43:29

JavaScript模板引擎

2023-02-13 14:47:32

人工智能機(jī)器學(xué)習(xí)ChatGPT

2016-09-06 19:45:18

javascriptVue前端

2018-09-18 10:11:21

前端vue.jsjavascript

2021-04-19 11:16:17

小程序微信開發(fā)

2024-07-10 10:38:58

Vue組件函數(shù)

2013-12-04 14:31:28

微軟Windows未來(lái)

2023-09-04 08:08:59

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线免费观看黄a | 日韩视频一区 | 国产一区二区在线看 | 国产精品久久久久久婷婷天堂 | 久久久久久国产 | 美女久久| 日韩在线小视频 | 欧美一级二级三级 | 久在线 | 三级在线免费 | av在线一区二区三区 | 亚洲综合色自拍一区 | 日本三级在线 | 国产欧美一区二区三区久久 | 亚洲精品成人 | 一区在线观看 | 欧美日韩成人一区二区 | 亚洲精品一区二区在线 | 亚洲欧美一区二区三区国产精品 | 成人精品鲁一区一区二区 | 毛片免费在线观看 | com.色.www在线观看 | 欧美在线播放一区 | 久久青青 | 成人1区2区 | 欧美日本免费 | 97国产精品视频人人做人人爱 | 免费一级黄色 | 黑人巨大精品欧美一区二区免费 | 粉色午夜视频 | 美女在线一区二区 | 成人免费淫片aa视频免费 | 免费黄色a级毛片 | 天堂男人av | 一区二区三区免费 | 91在线影院 | 国产亚洲日本精品 | 国产美女在线观看 | 国产在线网站 | 日韩一区二区福利 | 国产一区 日韩 |