老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

如何在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 函數將 '-' 轉換為駝峰。這里有個三目運算:

res[name] = isPlainObject(val) ? val : { type: val }

判斷了一下 val 如果是 object ,那么在res對象上面添加一個為name變量的屬性,并且將該屬性的值設置為val。這個其實就是處理下面這種props的寫法:

props: {
 // 對象形式
 id: {
  type: Number,
  required: true
 }
}

如果 val 不是 object ,那么也在res對象上面添加一個為name變量的屬性,并且將該屬性的值設置為{ type: val }。這個其實就是處理下面這種props的寫法:

props: {
 // 基礎的類型檢查
 name: String,
 // 多個可能的類型
 value: [String, Number],
}

經過處理后props會變成了下面這樣:

props: {
 name: {
  type: String
 },
 value: {
  type: [String, Number]
 }
}

所以不管我們使用vue提供的 props 哪種寫法,最終vue都會幫我們轉換成下面這種類型:

props: {
 name: {
  ...,
  type: '類型'
 }
}

接下來看看上面提到的util函數 isPlainObject ,先把源碼貼出來。

const _toString = Object.prototype.toString

export function isPlainObject (obj: any): boolean {
 return _toString.call(obj) === '[object Object]'
}

其實 Object.prototype.toString.call(obj) 的值為obj對象的類型。例如:

Object.prototype.toString.call({a: 1})  // [object Object]
Object.prototype.toString.call(new Date) // [object Date]
Object.prototype.toString.call([1])   // [object Array]
Object.prototype.toString.call(null)  // [object Null]

接下來看看上面提到的util函數 camelize ,還是先把源碼貼出來。

export function cached (fn: F): F {
 const cache = Object.create(null)
 return (function cachedFn (str: string) {
 const hit = cache[str]
 return hit || (cache[str] = fn(str))
 }: any)
}

const camelizeRE = /-(\w)/g
export const camelize = cached((str: string): string => {
 return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
})

這里定義了兩個函數,分別是 cached 和 camelize ,其中 camelize 就是我們上面調用的, cached 是在 camelize 函數內部調用的。

我們先來看看 camelize 函數,其實 camelize 函數就是執行 cached 后返回的一個函數。調用 cached 時傳入了一個箭頭函數,箭頭函數內部是調用了正則的 replace 方法,將傳入的 str 變量中匹配 /-(\w)/g 的變成大寫字母,并且返回 replace 后的值。(也就是將 - 轉換成駝峰)。

再來看看 cached 函數,該函數傳入的變量其實就是 camelize 那里的箭頭函數,首先定義了一個 cache 空對象,然后直接返回了 cachedFn 函數。我們在外部調用 camelize(key) 時,其實就是執行了這里的了 cachedFn 函數, str 的值就是傳入的 key 的值。很明顯這里是一個閉包,可以在外部調用 camelize 函數的時候可以修改或者讀取這里定義的 cache 對象的值。獲取 cache 對象中 key 為 str 變量值的屬性值賦值給 hit 變量。如果有hit變量的值,那么就直接返回hit的值,如果沒有就執行 camelize 傳入的箭頭函數,并且將箭頭函數的返回值賦值給 catche 對象的 str 屬性。如果下次調用 camelize 函數時傳入了相同的 str ,那么就不會執行箭頭函數,直接返回閉包中的 cache 對象的 str 屬性的值。這里是性能優化的一種手段。

例如:第一次調用 camelize('name') 后, cache 對象的值就變成了{name: 'name'}。然后在其他地方再次調用 camelize('name') 時再次執行 cachedFn 函數,此時 hit 變量的值為'name'。直接返回 hit 變量的值,不會執行傳入的箭頭函數。

vue是什么

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。

看完上述內容,你們對如何在vue中使用props有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯行業資訊頻道,感謝大家的支持。


新聞名稱:如何在vue中使用props
分享URL:http://www.xueling.net.cn/article/jghgjs.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 欧美在线观看第一页 | 美女超碰 | 麻豆精品一二三区 | 日韩一级片网址 | 国产成人精品无码一区二区蜜柚 | 精品一区二区三区四区 | 久久亚洲色WWW成人图片 | 91国产精品在线 | 在线观看av黄色 | 一级生性活片免费视频片 | www.xxxx国产 | 2021国产精品自在自线 | 夜夜激情网 | 成人天堂视频在线观看 | 男女高潮又爽又黄又无遮挡 | 国产视频亚洲一区 | 久久久久久666 | 人妻无码精品久久亚瑟影视 | www.99久| 一级特黄爽大片刺激在线 | 国产成人精品一区二区尿失禁 | 久久久夜色精品亚洲a | 男女无套内射白将在线线国语 | 亚洲免费色 | 欧美在线免费看视频 | 日韩四区 | 男人自慰泄欲飞机GAY2022 | 日本中文不卡 | 毛片基地视频 | 国产第一二区 | 美女毛多水多做爰国产毛片小说 | 色综合视频一区二区三区日韩 | jizz亚洲大全 | 亚洲欧美日本久久综合网站 | 亚洲国产精华液网站w | 精一区二区 | 97色女| 夜夜爽爽爽久久久久久魔女 | 少妇裸体淫交视频免费看 | 少妇伦子伦情品无吗 | 成人免费观看黄a大片夜月小说 |