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

首頁 > 語言 > JavaScript > 正文

從vue源碼看props的用法

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

前言

平時寫vue的時候知道 props 有很多種用法,今天我們來看看vue內部是怎么處理 props 中那么多的用法的。

vue提供的props的用法

1. 數組形式

props: ['name', 'value']

2. 對象形式

對象形式內部也提供了三種寫法:

props: { // 基礎的類型檢查 name: String, // 多個可能的類型 value: [String, Number], // 對象形式 id: {  type: Number,  required: true }}

props實現的原理

function normalizeProps (options: Object, vm: ?Component) { const props = options.props if (!props) return const res = {} let i, val, name if (Array.isArray(props)) { ... } else if (isPlainObject(props)) { ... } else if (process.env.NODE_ENV !== 'production') { ... } options.props = res}

normalizeProps 函數就是vue實際處理 props 的地方,從函數名的翻譯我們可以看出該函數的功能就是標準化 props 的值。該函數主要分成3部分:① 從 options 對象中獲取 props 的值并且定義一個res空對象;②幾個 if ... else ,分別根據 props 值的不同類型來處理 res 對象;③ 用處理后的 res 對象覆蓋原來 options 對象的 props 屬性的值。

接下來看看那幾個 if ... else 的代碼:

if (Array.isArray(props)) { i = props.length while (i--) {  val = props[i]  if (typeof val === 'string') {  name = camelize(val)  res[name] = { type: null }  } else if (process.env.NODE_ENV !== 'production') {  warn('props must be strings when using array syntax.')  } } }

這個代碼實際就是處理props的值為數組的情況,例如: props: ['name', 'value'] 。使用while遍歷該數組,如果數組內元素的類型不是字符串并且不是生產環境,那么就拋錯:‘props的值類型為數組時,數組里面的元素的類型就必須是字符串'。如果是字符串的情況下,使用 camelize 函數處理一下 val 的值,并且賦值給 name 變量。這里的 camelize 函數的實際作用就是將 '-' 轉換為駝峰。 camelize 函數具體的實現方式在后面分析。然后在 res 對象上面添加一個為 name 變量的屬性,該屬性的值為空對象 { type: null } 。

props: ['name', 'value'] 這種寫法經過上面的處理后就會變成了下面這樣:

props: { name: {  type: null }, value: {  type: null }}

接下來看看下面這個 else if(isPlainObject(props)) ,這里的 isPlainObject 函數實際就是返回 props 的值是否為 object , isPlainObject 函數的具體實現我們也在后面分析。

else if (isPlainObject(props)) { for (const key in props) {  val = props[key]  name = camelize(key)  res[name] = isPlainObject(val)  ? val  : { type: val } } }

使用 for...in 遍歷props對象,和上面一樣使用 camelize 函數將 '-' 轉換為駝峰。這里有個三目運算:

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

圖片精選

主站蜘蛛池模板: 漯河市| 临桂县| 天峨县| 河西区| 浠水县| 横峰县| 梨树县| 东乌珠穆沁旗| 澳门| 安福县| 库尔勒市| 新宁县| 芷江| 轮台县| 延川县| 年辖:市辖区| 辽宁省| 定兴县| 旅游| 油尖旺区| 确山县| 九台市| 招远市| 辽阳市| 连城县| 哈尔滨市| 开平市| 宁安市| 屏东市| 鹰潭市| 呈贡县| 甘德县| 陕西省| 石渠县| 女性| 凤台县| 泾阳县| 大兴区| 诸暨市| 北碚区| 灵川县|