自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

很多人不知道 Vue 中的組件就是一個函數(shù)!

開發(fā) 架構(gòu)
在所有組件之下,組件只是返回一些HTML的函數(shù)。這是一個強大的簡化,如果你曾研究過Vue代碼庫的復(fù)雜性,那么你就會知道這實際上不是事實。但是從根本上講,這就是Vue為我們所做的事情。

 在所有組件之下,組件只是返回一些HTML的函數(shù)。

[[333552]]

這是一個強大的簡化,如果你曾研究過Vue代碼庫的復(fù)雜性,那么你就會知道這實際上不是事實。但是從根本上講,這就是Vue為我們所做的事情。

看一下這個組件:

  1. <template> 
  2.   <div> 
  3.     <h1>{{ title }}</h1> 
  4.     <p>Some words that describe this thing</p> 
  5.     <button>Clickity click!</button> 
  6.   </div> 
  7. </template> 

 

下面是用 Javascript 實現(xiàn),它做了同樣的事情:

 

 

  1. function component(title) { 
  2.   let html = ''
  3.  
  4.   html += '<div>'
  5.   html += `<h1>${title}</h1>`; 
  6.   html += '<p>Some words that describe this thing</p>'
  7.   html += '<button>Clickity click!</button>'
  8.   html += '</div>'
  9.  
  10.   return html; 

該代碼與Vue組件構(gòu)造HTML 方式基本相同。當(dāng)然,這里沒有響應(yīng)性,事件處理或其它一系列功能,但是獲取輸出的 HTML 是同一回事。

如果你從未想過以這種方式考慮組件,那很正常,很多人也沒有。

當(dāng)你開始學(xué)習(xí)Vue時,會看到新的語法和所有這些神奇的東西,它們看起來與我們以前接觸過的任何東西都不太一樣。

依靠編程基礎(chǔ)

一旦真正意識到 Vue 組件實際上只是函數(shù),那么我們就可以發(fā)現(xiàn)一些隱藏的知識點。

我們可以從學(xué)習(xí) Javascript 或任何其他編程語言中學(xué)到的知識應(yīng)用到 Vue 中。

例如,假設(shè)我們想學(xué)習(xí)如何編寫優(yōu)雅和簡潔的Vue組件。我們可以將所學(xué)到的編寫干凈 Javascript 的知識應(yīng)用到Vue組件中。比如保持函數(shù)簡小,使用描述性名稱,等等

即使是學(xué)習(xí)類似的框架,如React或Angular,也是非常有用的練習(xí)。

現(xiàn)在讓我們看一個更詳細的例子。

以新的視角進行重構(gòu)

假設(shè)有以下的一個組件:

  1. <template> 
  2.   <div> 
  3.     <h1>{{ title }}</h2> 
  4.     <div class="navigation"
  5.       <!-- ... --> 
  6.     </div> 
  7.  
  8.     <div v-for="item in list"
  9.       <h2 class="item-title"
  10.         {{ item.title }} 
  11.       </h2> 
  12.       <p class="item-description"
  13.         {{ item.description }} 
  14.       </p> 
  15.     </div> 
  16.  
  17.     <footer> 
  18.       <!-- ... --> 
  19.     </footer> 
  20.   </div> 
  21. </template> 

 

為簡化,我們將v-for內(nèi)部的內(nèi)容變成了一個新的組件,如下所示:

  1. <template> 
  2.   <div> 
  3.     <h2 class="item-title"
  4.       {{ item.title }} 
  5.     </h2> 
  6.     <p class="item-description"
  7.       {{ item.description }} 
  8.     </p> 
  9.   </div> 
  10. </template> 

 

完成此操作后,我們將其替換為父組件,這使我們擺脫了多余的嵌套:

  1. <template> 
  2.   <div> 
  3.     <h1>{{ title }}</h2> 
  4.     <div class="navigation"
  5.       <!-- ... --> 
  6.     </div> 
  7.  
  8.     <ListItem 
  9.       v-for="item in list" 
  10.       :item="item" 
  11.     /> 
  12.  
  13.     <footer> 
  14.       <!-- ... --> 
  15.     </footer> 
  16.   </div> 
  17. </template> 

 

如果我們在寫Javascript,我們會用幾乎完全相同的方式來做這些。

下面是一個使用循環(huán)的例子

  1. function goingLoopy() { 
  2.   const elements = document.querySelectorAll('.item'); 
  3.  
  4.   for (const el of elements) { 
  5.     const { width } = el.getBoundingClientRect(); 
  6.     if (width > 500) { 
  7.       el.classList.add('large'); 
  8.     } 
  9.   } 

在這里,我們使用 DOM 方法獲取了類為 item 的所有元素,如果它們大于500px,則將large類添加其中。

這已經(jīng)很好了,但是如果還要優(yōu)化代碼,應(yīng)該怎么做呢

我的猜測是,你可能會把for..of的內(nèi)容帶入一個新函數(shù)中:

  1. function updateElement(el) { 
  2.   const { width } = el.getBoundingClientRect(); 
  3.   if (width > 500) { 
  4.     el.classList.add('large'); 
  5.   } 
  6.  
  7. function goingLoopy() { 
  8.   const elements = document.querySelectorAll('.item'); 
  9.  
  10.   for (const el of elements) { 
  11.     updateElement(el); 
  12.   } 

如果你將組件看作是一個函數(shù),那么對于我們的優(yōu)化會有更深入的了解。

他們一直在你腦海中,你只是沒有意識到。

作者:Michael Thiessen 譯者:前端小智 來源:medium

來源:https://medium.com/js-dojo/vue-js-functional-components-what-why-and-when-439cfaa08713

本文轉(zhuǎn)載自微信公眾號「****」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系****公眾號。

 

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2020-06-29 08:28:36

v-for 解構(gòu)函數(shù)

2021-01-15 05:39:13

HashMapHashTableTreeMap

2020-07-07 08:35:53

VueKey組件

2015-07-22 11:53:29

云計算AWS分析癱瘓

2021-08-24 00:13:23

Windows 10Windows微軟

2022-12-05 15:23:33

JavaScript技巧運算符

2019-01-07 09:27:39

2021-08-27 10:03:12

人工智能AI

2020-11-20 06:13:04

Like %

2018-08-10 10:36:25

SSL證書誤區(qū)

2020-07-01 08:36:43

CSS規(guī)范web

2019-12-13 19:52:29

人工智能AI

2021-05-08 23:19:25

微信存儲小程序

2020-11-16 11:24:00

Spring AOP數(shù)據(jù)庫

2023-06-05 08:07:34

聚集索引存儲數(shù)據(jù)

2021-12-14 10:55:14

Python元素數(shù)據(jù)

2022-06-23 13:13:36

GitHub開發(fā)技巧

2021-01-07 05:27:20

包導(dǎo)入變量

2021-01-12 12:33:20

Pandas技巧代碼

2025-01-06 09:14:54

HOCVue3render
點贊
收藏

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