国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入解析Vue 組件命名那些事

2024-05-06 15:14:13
字體:
來源:轉載
供稿:網友

There are only two things in Computer Sciences: cache invalidation and naming things.

—— Phil Karlton

誠如上述所言,編程中變量命名確實令人很頭疼。我們模糊地知道,Vue 組件的名稱最好不要和原生 HTML 標簽相同。為了避免重名,通常會在組件名稱前面加上一個前綴,如 el-button、el-input、el-date-picker。這通常不會有什么問題,但有時候你的模板中混雜了原生 HTML 標簽和組件標簽,要想區分它們并不是很容易。

當我看到 Ant.design 的 React 組件是下面這樣的時候,我感覺到一種自由的味道。首先,組件名可以使用原生 HTML 標簽名,意味著再也不用較勁腦汁去規避原生 HTML 標簽了。另外,這些組件都使用了首字母大寫標簽名,使它們很容易地與原生小寫的 HTML 標簽區分。

ReactDOM.render( <div>  <Button type="primary">Primary</Button>  <Input placeholder="Basic usage" />  <Select defaultValue=".com" style={{ width: 70 }}>   <Option value=".com">.com</Option>   <Option value=".jp">.jp</Option>   <Option value=".cn">.cn</Option>   <Option value=".org">.org</Option>  </Select> </div>, mountNode);

受 Ant.design 的啟發,我思考 Vue 組件命名能不能達到同樣的效果呢?要找到答案,必須摸清楚 Vue 組件命名到底有什么限制。下面將分別從 Vue 1.0 和 Vue 2.0 來談談組件命名的機制:

Vue 1.0 組件命名機制

組件注冊

我們以一個最簡單的例子來研究 Vue 組件的注冊過程:

Vue.component('MyComponent', { template: '<div>hello, world</div>'})

通過跟蹤代碼的執行過程,發現對組件的名稱有兩處檢查。

檢查名稱是否與 HTML 元素或者 Vue 保留標簽重名,不區分大小寫。可以發現,只檢查了常用的 HTML 元素,還有很多元素沒有檢查,例如 button、main。

if (type === 'component' && (commonTagRE.test(id) || reservedTagRE.test(id))) { warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);}// var commonTagRE = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i;// var reservedTagRE = /^(slot|partial|component)$/i;

檢查組件名稱是否以字母開頭,后面跟字母、數值或下劃線。

if (!/^[a-zA-Z][/w-]*$/.test(name)) { warn('Invalid component name: "' + name + '". Component names ' + 'can only contain alphanumeric characaters and the hyphen.');}

基于以上兩點,可以總結出組件的命名規則為:組件名以字母開頭,后面跟字母、數值或下劃線,并且不與 HTML 元素或 Vue 保留標簽重名。

然而我們注意到,在上面的檢查中,不符合規則的組件名稱是 warn 而不是 error,意味著檢查并不是強制的。實際上,Vue 組件注冊的名稱是沒有限制的。你可以用任何 JavaScript 能夠表示的字符串,不管是數字、特殊符號、甚至漢字,都可以成功注冊。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 灌云县| 武邑县| 时尚| 安多县| 留坝县| 宜宾市| 丰都县| 乳源| 含山县| 专栏| 闻喜县| 克山县| 江源县| 启东市| 建德市| 霍城县| 察雅县| 兰西县| 景谷| 河池市| 肇东市| 龙胜| 汉源县| 郓城县| 洛南县| 平远县| 常山县| 浙江省| 新野县| 邓州市| 白银市| 特克斯县| 长海县| 浮山县| 澄迈县| 肥东县| 太和县| 新巴尔虎左旗| 古蔺县| 金塔县| 安仁县|