国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

【Vuejs】908- Vue 3.0 進階之深入學習響應式 Refs API

共 17618字,需瀏覽 36分鐘

 ·

2021-03-26 08:41

本文是 Vue 3.0 進階系列 的第九篇文章,在組合式 API setup 配置項中經(jīng)常會見到 Refs API 的身影,比如 reftoReftoRefs 等。那么這些常用 API 的作用和使用場景是什么?它們背后的實現(xiàn)原理又是什么?接下來,阿寶哥將帶著這些問題,跟大家一起來深入學習響應式 Refs API。

一、ref

該函數(shù)接受一個內部值并返回一個響應式且可變的 ref 對象,該對象內部含有一個 value 屬性。

1.1 使用示例

const { ref } = Vue

const skill = ref("Vue 3")
console.log(skill.value) // Vue 3 
skill.value = "Vite 2"
console.log(skill.value) // Vite 2

1.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function ref<T extends object>(value: T): ToRef<T>
export function ref<T>(value: T): Ref<UnwrapRef<T>>
export function ref<T = any>(): Ref<T | undefined>
export function ref(value?: unknown{
  return createRef(value)
}

由以上代碼可知,ref 函數(shù)的 value 參數(shù)除了支持基本數(shù)據(jù)類型之外,也支持非基本數(shù)據(jù)類型的參數(shù)。在 ref 函數(shù)內部,會調用 createRef 工廠函數(shù)來創(chuàng)建 ref 對象。createRef 函數(shù)具體實現(xiàn)如下:

// packages/reactivity/src/ref.ts
function createRef(rawValue: unknown, shallow = false{
  if (isRef(rawValue)) {
    return rawValue
  }
  return new RefImpl(rawValue, shallow)
}

在創(chuàng)建 ref 對象時,如果發(fā)現(xiàn) rawValue 參數(shù)本身就是 ref 對象的話,則會直接返回該對象。否則,會調用 RefImpl 構造函數(shù)創(chuàng)建 ref 對象。以 ref 使用的示例為例,通過 ref("Vue 3") 創(chuàng)建的 ref 對象的內部結構如下圖所示:

從上圖中,我們可以清楚地看到 ref 對象內部含有 __v_isRef_rawValue_value 等屬性。那么這些屬性有什么用呢?這里我們先來介紹 __v_isRef 屬性的作用。

二、isRef

該函數(shù)用于檢查指定值是否為一個 ref 對象。

2.1 使用示例

const { ref, isRef } = Vue

const name = ref("阿寶哥")
console.log(isRef(name)) // true

2.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function isRef<T>(r: Ref<T> | unknown): r is Ref<T>
export function isRef(r: any): r is Ref {
  return Boolean(r && r.__v_isRef === true)
}

由以上代碼可知,在 isRef 函數(shù)內部是通過 r && r.__v_isRef === true 表達式來判斷參數(shù) r 是否為 ref 對象。前面我們已經(jīng)分析了 ref 函數(shù),已經(jīng)知道 ref 對象的本質是 RefImpl 類的實例。那么該實例上的 __v_isRef 成員屬性是什么時候設置的呢?下面我們從源碼中來查找該問題的答案:

// packages/reactivity/src/ref.ts
class RefImpl<T> {
  private _value: T
  public readonly __v_isRef = true
  // 省略大部分代碼
}

觀察以上代碼可知,__v_isRef 屬性是一個公有的只讀屬性且它的值始終為 true。好的,了解完如何創(chuàng)建 ref 對象和如何檢查指定值是否為一個 ref 對象之后,我們來介紹下一個函數(shù) —— unref。

三、unref

該函數(shù)接受一個參數(shù),如果該參數(shù)是一個 ref 對象,則返回該對象的內部值,否則返回參數(shù)本身。它是 val = isRef(val) ? val.value : val 的語法糖函數(shù)。

3.1 使用示例

const { ref, unref } = Vue

const name = ref("阿寶哥")
console.log(unref(name)) // "阿寶哥"

3.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function unref<T>(ref: T): T extends Ref<infer V> ? V : T {
  return isRef(ref) ? (ref.value as any) : ref
}

unref 函數(shù)內部,會通過 isRef 函數(shù)判斷 ref 參數(shù)是否為 ref 對象,如果是的話,則會返回 ref.value 的值,否則返回參數(shù)本身。

四、toRef

該函數(shù)可以用來為源響應式對象上的某個 property 新創(chuàng)建一個 ref。之后,ref 可以被傳遞,它會保持對其源 property 的響應式連接。

4.1 使用示例

const { reactive, toRef } = Vue

const man = reactive({
  name"阿寶哥",
  skill"Vue 3"
})
const skillRef = toRef(man, 'skill');
console.log(`skillRef.value:${skillRef.value}`); // skillRef.value:Vue 3

skillRef.value = "Vite 2";
console.log(`man.skill:${man.skill}`); // man.skill:Vite 2

4.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function toRef<T extends objectK extends keyof T>(
  object: T,
  key: K
): ToRef<T[K]> 
{
  return isRef(object[key])
    ? object[key]
    : (new ObjectRefImpl(object, key) as any)
}

toRef 函數(shù)接受 objectkey 兩個參數(shù),其中 object 參數(shù)的類型為非原始類型。在函數(shù)中,會判斷 object[key] 對象是否為 ref 對象,如果是的話,直接返回 object[key] 的值,否則調用 ObjectRefImpl 類的構造函數(shù)并返回該類的實例:

// packages/reactivity/src/ref.ts
class ObjectRefImpl<T extends object, K extends keyof T> {
  public readonly __v_isRef = true // 用于標識 ref 對象

  constructor(private readonly _object: T, private readonly _key: K) {}

  get value() {
    return this._object[this._key]
  }

  set value(newVal) {
    this._object[this._key] = newVal
  }
}

ObjectRefImpl 類的定義很簡單,類中包含一個公有的只讀屬性 __v_isRef,該屬性用于標識該類的實例是否為 ref 對象。除此之外,還包含了一個 settergetter 方法,用來操作 value 的值。

五、toRefs

該函數(shù)用于將響應式對象轉換為普通對象,其中結果對象的每個 property 都是指向原始對象相應 propertyref。

5.1 使用示例

const { reactive, toRefs } = Vue

const man = reactive({
  name"阿寶哥",
  skill"Vue 3"
})
console.log(toRefs(man));

5.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function toRefs<T extends object>(object: T): ToRefs<T{
  if (__DEV__ && !isProxy(object)) {
    console.warn(`toRefs() expects a reactive object but received a plain one.`)
  }
  const ret: any = isArray(object) ? new Array(object.length) : {}
  for (const key in object) {
    ret[key] = toRef(object, key) // 調用 toRef 函數(shù)為對象的 property 新建一個 ref
  }
  return ret
}

由以上代碼可知,toRefs 主要用于把響應式對象轉換為普通對象, 在轉換過程中是通過調用 toRef 函數(shù)來處理對象的每個屬性。需要注意的是,toRefs 函數(shù)會為源對象中包含的 property 生成 ref。如果要為特定的 property 創(chuàng)建 ref,則應當使用 toRef 函數(shù)。

toRefs 示例的代碼成功執(zhí)行后,控制臺會輸出以下結果:

那么在實際項目中,toRefs 函數(shù)有什么用呢?當從 setup 函數(shù)返回響應式對象時,toRefs 非常有用,這樣組件就可以在不丟失響應性的情況下對返回的對象進行解構:

<div id="app"></div>
<script>
   const { reactive, toRefs, createApp } = Vue

   function useLoginInfo() {
     const man = reactive({
       name: "阿寶哥",
       skill: "Vue 3"
     })
     /
/ 返回時轉換為ref
     return toRefs(man)
   }

   const app = createApp({
     setup() {
       /
/ 可以在不失去響應性的情況下解構
       const { name, skill } = useLoginInfo()
       return {
         name,
         skill
       }
    },
    template: `{{name}}正在學{{skill}}`
   })
  app.mount("#app")
</
script>

在以上示例中,我們在 useLoginInfo 函數(shù)內部使用了 toRefs 函數(shù),用于對響應式 man 對象進行轉換。如果直接返回響應式 man 對象的話,在進行解構時 nameskill 的值如下圖所示:

而通過 toRefs 函數(shù)對響應式對象 man 進行轉換后,在進行解構時 nameskill 的值是這樣的:

通過對比發(fā)現(xiàn),使用 toRefs 函數(shù)之后,可以在不失去響應性的情況下進行解構操作。

六、shallowRef

該函數(shù)用于創(chuàng)建一個跟蹤自身 .value 變化的 ref,但不會使其值也變成響應式的。

6.1 使用示例

const { shallowRef, isReactive } = Vue

const shallowMan = shallowRef({
  name"阿寶哥",
  skill"Vue 3"
})

console.log(isReactive(shallowMan.value)) // false 

6.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function shallowRef<T extends object>(
  value: T
): T extends Ref ? T : Ref<T>
export function shallowRef<T>(value: T): Ref<T>
export function shallowRef<T = any>(): Ref<T | undefined>
export function shallowRef(value?: unknown{
  return createRef(value, true)
}

shallowRef 函數(shù)內部也是通過調用 createRef 工廠函數(shù)來創(chuàng)建 ref 對象。跟前面介紹的 ref 函數(shù)的區(qū)別是,ref 函數(shù)內部未設置 createRef 函數(shù)的第二個參數(shù),該參數(shù)的默認值是 false,具體如下所示:

function createRef(rawValue: unknown, shallow = false{
  if (isRef(rawValue)) {
    return rawValue
  }
  return new RefImpl(rawValue, shallow)
}

shallowRef 示例的輸出結果可知,如果 shallow 參數(shù)的值為 true 的話,則 shallowMan.value 對象非響應式對象。如果要進一步理解 shallowRef 函數(shù)和 ref 函數(shù)之間的區(qū)別,我們就需要分析 RefImpl 類的具體實現(xiàn):

// packages/reactivity/src/ref.ts
class RefImpl<T> {
  private _value: T

  public readonly __v_isRef = true // 用于判斷是否為 ref 對象

  constructor(private _rawValue: T, public readonly _shallow = false) {
    this._value = _shallow ? _rawValue : convert(_rawValue) // 是否把 _rawValue 對象轉換為響應式對象
  }
  
  get value() {
    track(toRaw(this), TrackOpTypes.GET, 'value'// 跟蹤 get 操作
    return this._value
  }

  set value(newVal) {
    if (hasChanged(toRaw(newVal), this._rawValue)) { // 判斷值是否發(fā)生變化
      this._rawValue = newVal
      this._value = this._shallow ? newVal : convert(newVal)
      trigger(toRaw(this), TriggerOpTypes.SET, 'value', newVal) // 觸發(fā) set 操作
    }
  }
}

RefImpl 構造函數(shù)中,如果 _shallow 的值為 true,則會直接把 _rawValue 的值賦值給 this._value 屬性,否則會先調用 convert 函數(shù)對 _rawValue 的值進行轉換,再進行賦值操作。其中 convert 函數(shù)被定義在 reactivity/src/ref.ts 文件中:

// packages/reactivity/src/ref.ts
const convert = <T extends unknown>(val: T): T =>
  isObject(val) ? reactive(val) : val

若待轉換的值是對象類型的話,則會使用 reactive 函數(shù)把 val 對象轉換為響應式對象,否則不做任何處理直接返回 val 對象。

了解完 shallowRef 函數(shù)之后,你可能會想知道在實際項目中,使用 shallowRef 函數(shù)之后會有什么影響?這里阿寶哥來舉一個具體的例子:

const { shallowRef, watchEffect } = Vue

const shallowMan = shallowRef({
  name"阿寶哥",
  skill"Vue 3"
})

watchEffect(() => {
  console.log(shallowMan.value.skill)
})

shallowMan.value.skill = "Vite 2"

以上代碼執(zhí)行后,控制臺只會輸出一次 "Vue 3",但此時 shallowMan.value 的值已經(jīng)被更新了:

shallowMan.value
{name: "阿寶哥", skill: "Vite 2"}

那么如何及時輸出當前最新的值呢?針對這個問題,你可以使用 triggerRef 函數(shù)。

七、triggerRef

該函數(shù)用于手動執(zhí)行與 shallowRef 關聯(lián)的任何副作用。

7.1 使用示例

const { shallowRef, watchEffect, triggerRef } = Vue

const shallowMan = shallowRef({
  name"阿寶哥",
  skill"Vue 3"
})

watchEffect(() => {
  console.log(shallowMan.value.skill)
})

shallowMan.value.skill = "Vite 2"
triggerRef(shallowMan) // 手動執(zhí)行與 shallowMan 關聯(lián)的任何副作用

在添加完 triggerRef(shallowMan) 這行語句之后,以上的代碼成功運行后,控制臺就會輸出以下內容:

Vue 3
Vite 2

7.2 函數(shù)實現(xiàn)

export function triggerRef(ref: Ref{
  trigger(toRaw(ref), TriggerOpTypes.SET, 'value', __DEV__ ? ref.value : void 0)
}

triggerRef 函數(shù)內部,會調用 effect.ts 文件中導出的 trigger 函數(shù)來觸發(fā) TriggerOpTypes.SET 操作。其中 TriggerOpTypes 是枚舉對象,用于定義觸發(fā)的操作類型。除了 SET 之外,還有 ADDDELETE、CLEAR 等操作:

// packages/reactivity/src/operations.ts
export const enum TriggerOpTypes {
  SET = 'set',
  ADD = 'add',
  DELETE = 'delete',
  CLEAR = 'clear'
}

好的,triggerRef 函數(shù)我們就先介紹到這里,至于 trigger 函數(shù)內部是如何工作的,阿寶哥將在后續(xù)的文章中來揭開它背后的秘密。最后,我們來介紹 customRef 函數(shù)。

八、customRef

該函數(shù)用于創(chuàng)建一個自定義的 ref,并對其依賴項跟蹤和更新觸發(fā)進行顯式控制。它需要一個工廠函數(shù),該函數(shù)接收 tracktrigger 函數(shù)作為參數(shù),并且返回一個帶有 getset 的對象。

8.1 使用示例

<div id="app"></div>
<script>
   const { customRef, createApp } = Vue

   function useDebouncedRef(value, delay = 200) {
     let timeout
     return customRef((track, trigger) => {
       return {
         get() {
           track()
           return value
         },
         set(newValue) {
           clearTimeout(timeout)
           timeout = setTimeout(() => {
             value = newValue
             trigger()
           }, delay)
         }
       }
      })
    }

    const app = createApp({
      setup() {
        return {
          text: useDebouncedRef('阿寶哥')
        }
      },
      template: `<input v-model="text" /
>`
    })
    app.mount("#app")
</script>

在以上示例中,我們使用 customRef 函數(shù)創(chuàng)建了一個自定義 ref,該 ref 提供了 debounce 功能。

8.2 函數(shù)實現(xiàn)

// packages/reactivity/src/ref.ts
export function customRef<T>(factory: CustomRefFactory<T>): Ref<T{
  return new CustomRefImpl(factory) as any
}

customRef 函數(shù)接受一個 factory 參數(shù),其類型為 CustomRefFactory<T>

// packages/reactivity/src/ref.ts
export type CustomRefFactory<T> = (
  track: () => void,
  trigger: () => void
) => {
  get() => T
  set(value: T) => void
}

通過以上類型定義可知,該自定義 ref 工廠函數(shù)接收 tracktrigger 函數(shù)作為參數(shù),并且返回一個帶有 getset 的對象。而在 customRef 函數(shù)內部,會以傳入的 factory 工廠函數(shù)作為參數(shù)調用 CustomRefImpl 類的構造函數(shù)并返回新創(chuàng)建的實例。

其中 CustomRefImpl 類被定義在 reactivity/src/ref.ts 文件中,具體實現(xiàn)如下所示:

// packages/reactivity/src/ref.ts
class CustomRefImpl<T> {
  private readonly _get: ReturnType<CustomRefFactory<T>>['get']
  private readonly _set: ReturnType<CustomRefFactory<T>>['set']

  public readonly __v_isRef = true // 用于標識 ref 對象

  constructor(factory: CustomRefFactory<T>) {
    const { getset } = factory(
      () => track(this, TrackOpTypes.GET, 'value'), // 跟蹤 get 操作
      () => trigger(this, TriggerOpTypes.SET, 'value'// 觸發(fā) set 操作
    )
    this._get = get
    this._set = set
  }

  get value() {
    return this._get()
  }

  set value(newVal) {
    this._set(newVal)
  }
}

CustomRefImpl 類的構造函數(shù)中,會先調用傳入的 factory 工廠函數(shù),然后對該工廠函數(shù)返回的對象進行解構操作。以前面的 customRef 示例為例,getset 所對應的函數(shù)如下所示:

customRef((track, trigger) => {
  return {
    get() {
      track() //  () => track(this, TrackOpTypes.GET, 'value')
      return value
    },
    set(newValue) {
      clearTimeout(timeout)
      timeout = setTimeout(() => {
        value = newValue
        trigger() // () => trigger(this, TriggerOpTypes.SET, 'value')
      }, delay)
    }
  }
})

到這里,Refs API 都已經(jīng)介紹完了,細心的小伙伴應該會發(fā)現(xiàn)多個 Ref API 中都使用到了定義在 effect.ts 文件中的 tracktrigger 函數(shù),出于篇幅考慮阿寶哥就不打算繼續(xù)介紹這 2 個函數(shù)了。

在后續(xù)的 Vue 3 響應式原理專題中,阿寶哥將會詳細分析這 2 個函數(shù),感興趣的小伙伴記得關注阿寶哥的 Vue 3 進階 專欄喲。

九、參考資源

  • Vue 3 官網(wǎng) - Refs

聚焦全棧,專注分享 TypeScript、Vue 3、前端架構等技術干貨。

瀏覽 86
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 99视频免费在线| 日本三级片免费观看| 久久与婷婷| 精品丰满人妻一区二区三区免费观 | 特级丰满少妇一级AAAA爱毛片| 亚洲成av人无码| 自拍偷拍视频网| 3D动漫精选啪啪一期二期三期| 午夜嘿嘿| 影音先锋成人av| 五月天婷婷色色| 地表最强网红八月未央道具大秀| av色图| 国产av一区二区三区| 秋霞一级| 久久艹逼| 男女黄网站| 天天看高清无码| 成人免费毛片果冻日本| 青娱乐国产| 国产欧美综合一区二区三区| 无码人妻A片一区二区青苹果| 秋霞丝鲁片一区二区三区手机在绒免 | 大香蕉一区二区三区| 日韩欧美小视频| 久久久久久综合| 亚洲一卡二卡三卡四卡免| 日本在线视频不卡| 亚洲乱码国产乱码精品天美传媒 | 北条麻妃视频在线播放| 日本天堂Tv视频在线观看| 久草综合在线| 99精品无码| 在线观看视频免费无码免费视频 | 国产性爱网| 日韩中文字幕电影| 久久艹逼| 国产欧美在线视频| 日韩欧美一级二级| 国产精品啪啪啪啪| 做爱视频91| 国产日本欧美韩国久久久久| 亚洲成人AV在线| 无码AⅤ一区二区三区| 国产一区二区三区在线观看免费视频免费视频免费视频 | 天天艹天天干| 亚洲av小说| 无码专区av| 老妇性BBWBBWBBWBBW| 免费看a| 亚洲手机视频| 国产艹| 日韩一区二区三区精品| 九热视频| 肉色超薄丝袜脚交一区二区| 青草成人在线视频| 成人三级片在线观看| 91久久综合亚洲鲁鲁五月天| 青青自拍视频| 亚洲成人无码av| 免费视频A| 亚洲一级a片| 95四川乱子伦视频国产| 91麻豆国产在线观看| 免费国产视频| 免费无码在线观看| 亚洲精品日韩无码| 欧美日韩东京热| 三级片网站在线观看| 免费人成视频在线播放| 丰满的人妻一区二区10| 无码精品一区二区三区在线播放| 超碰在线免费| 亚洲第一在线| 免费在线成人网站| 欧美性爱-熊猫成人网| 国产黄色无码| 久久久久99精品成人片三人毛片 | 欧美三级欧美一级| 日本无码免费视频| 人人草人人摸人人看| 91精品成人电影| 亚洲.www| 黄色一级小说| 国产一区二区三区四区五区六区七区| 国产主播精品在线| 国产AV一区二区三区| 一区免费视频| 大色欧美| 青青草成人在线| 国产资源在线观看| 手机看片1024旧版| 午夜福利爱爱视频| 久久aaaa| 日韩一级片网站| 黄色AV免费观看| 亚洲综合一区二区三区| 星空AV| 久久黄色视频免费看| 无码高清视频| 桃色av| 手机免费av| 久久97| 少妇特黄A一区二区三区| 淫香淫色综合网| 日韩中文字幕久久| 最好看的MV中文字幕国语| 精品亚洲成人| 日韩毛片一区二区| 亚洲中文无码AV在线| 欧美三级视频在线| 国产伦精品一区二区三区色大师| 亚洲影院第一页在线观看| 怡红院爽妇网| 人妻体体内射精一区二区| 国产欧美综合一区| 天堂无吗| 中文字幕无吗| 揄拍成人国产精品视频| 国产成人电影一区二区| 特级爱爱视频| 天天草天天日| 亚洲欧美日韩成人| 天天舔天天操| 97国产精品视频人人做人人爱| 欧美久操| 青青免费在线视频| 黄色视频网站在线看| 做爰视频毛片下载蜜桃视频| 一本色道久久综合无码| 一级黄色小视频| 久热精品免费| 人人色视频| 激情国产| 久草超碰在线| 国产成人精品三级麻豆| 欧美一级操逼| 思思热在线| 天天搞天天曰在线观看| 亚洲高清国产欧美综合s8| 午夜亚洲AV永久无码精品蜜芽 | 国产一级黄| 免费看黄A级毛片成人片| 超碰在线观看99| 日韩小电影免费观看高清完整版在线观 | 亚洲成人在线视频观看| gogogo免费高清在线偷拍 | av天天日| 欧美18禁| 中文字幕+乱码+中文字幕一区| 色色色五月婷婷| www.久久精品视频| 国产愉拍91九色国产愉拍| 国产在线观看91| 国产学生妹| 久久精品91| 天天舔天天日| 久久波多野结衣| 91偷拍视频| 亚洲骚妇| 悠悠无码一区日韩妇女| 人人操人人爽人人爱| 黄色A一级| 无码做爰欢H肉动漫网站在线看 | 国产精品国产三级国产专区53| 欧美日韩黄色片| 午夜成人福利片| 熟练中出-波多野结衣| 激情五月丁香婷婷| 超碰精品| 这里只有精品91| 久久澡| 爱爱日韩| 无码不卡中文字幕| 一区二区三区日本| 亚洲欧美成人在线视频| 日韩成人小说| 精品欧美一区二区精品久久| 操美女的网站| 韩国三级AV| AV青青草原| 在线日韩国产| 手机AV在线播放| 久9视频| 制服乱伦| 亚洲精品蜜桃| 久久机热| 国产成人片色情AAAA片| 精品国产AV色一区二区深夜久久| 婷婷五月天电影网| 熟女人妻一区二区| 亚洲日韩欧美在线观看| 999免费视频| 国产又爽又黄免费网站校园里 | 密臀福利导航| 国产激情网址| 婷婷操逼网| 日韩成人一区二区| 亚洲无码精品在线| 日本无码一区二区三三| 中文字幕视频一区日日骚| 亚洲日韩中文字幕无码| 中文字幕日韩有码| 粗长哭叫打桩H体育生| 成人无码一区二区三区| 国产精品久久久久久久久久王安宇| 成人网站在线| 亚洲成人77777| 丁香六月婷婷综合缴| 日韩成人精品在线| 亚洲无码免费在线| 成人视频18| 国产成人tv| 日韩一级内射| 内射欧美| 国产A片视频| 91乱子伦国产乱子伦无码| 国产,亚洲91| 亚洲高清视频在线播放| 欧美一级视频在线观看| 国产中文字幕在线视频| 黄色视频| 国产特黄级AAAAA片免| 无码高潮视频| 色婷婷一区二区三区久久午夜| 日韩成人小电影| 特级西西444www大胆免费看| 精品人妻一区二区乱码一区二区| 大地影视官网第三页入口| 永久免费黄色视频| 激情AV在线| 小草久久95| 午夜免费无码视频| 天堂aaa| 中文字幕日韩电影| 婷婷激情四射| 亚洲一级免费免费在线观看| 三须三级久久三级久久18| 日韩成人三级片| 五月天激情性爱| 亚洲免费三级片| 成人av小说网站| 国产伦精品一区二区三区妓女下载| 波多野结衣高清视频| 亚洲精品第一页| 青春草在线视频| 亚洲一级婬片A片AAAA网址| 日韩高清欧美| 精品欧美视频| 日韩人妻精品无码久久| 日本三级片网站在线观看| 日韩不卡中文字幕| 亚洲成人内射| 亚洲天堂无码在线观看| 日本三级片免费观看| 99久久久久久久久久| 青青草原成人在线视频| 在线黄色小视频| 水蜜桃视频在线观看| 操B五月天| 国产淫荡视频| 亚洲日韩欧美一区二区| 成人免费无码| 亚洲无码三级片在线观看| 男女啪啪啪网站| www男人天堂| 五月婷婷AV| 亚洲视频456| 一边做一边说国语对白| 一区二区三区久久久久〖网:.〗 | 免费久草视频| 国产精品无码白浆高潮| 国产一区二区做爱| 波多野结衣与黑人| 91人妻人人澡人人爽人人精品乱| 99精品视频在线| 欧美日韩在线视频免费播放| 日韩WWW| 九色影院| 成人三级电影网| 国产在线性爱视频| 18禁黄色免费网站| 亚洲AV影院| 欧美精品网| 天天干天| 日韩国产在线| 久久视频这里有精品| 手机在线看A片| 青青草原网| 加勒比无码综合| 无码日韩人妻精品久久蜜桃| 在线视频第一页| 麻豆疯狂做受XXXX高潮视频| 成人免费在线网站| 亚洲A视频| 中文字幕视频在线免费观看| 中文字幕北条麻妃在线| 人人澡人人爱| 亚洲无码黄色电影| 国产激情视频网站| 国产高清一区二区三区| 色婷婷久久久久swag精品| 国产成人777777精品综合| 国产学生妹在线播放| 中文字幕三级片在线观看| 91啦丨熟女露脸| 日韩高清无码毛片| 欧美亚韩一区二区三区| 91精品国产乱码久久久久| 日本一区二区三区在线观看网站| 中文亚洲字幕| 超碰人人搞| 97福利在线| 日韩在线观看免费| av性爱在线| 男人天堂2024| 免费的一级A片| 91丨九色丨国产在线| 91人人澡人人爽人人看| 久草香蕉| 国产无码免费在线观看| 男人天堂中文字幕| 亚洲插菊花综合网| AAA黄片| 午夜无码精品| 精品自拍偷拍| 日日操天天操夜夜操| 婷婷操逼网| 欧美精品久久久久久| 热久久久久久| 岛国片资源| 国产毛片久久久久久国产毛片| 黃色一級片黃色一級片尖叫声-百度-百 | 中文字幕超清在线观看| 青青草操逼视频| 久久久久久久极品内射| 久久久成人免费电影| 视频二区中文字幕| 全国最大成人网| 色av影音先锋无吗一区| 亚洲综合色网站| 亚洲一区二区av| 婷婷五月18永久免费视频| 免费看操逼逼| 先锋影音av资源网| A免费观看| 成年人视频在线免费观看| 91精东传媒果冻传媒| 在线a视频免费观看| 天天日天天射天天操| 亚洲AV三级片| 91香蕉视频免费在线观看| 大肉大捧一进一出两腿| 蜜芽成人在线视频| 免费看成人A片无码照片88hⅤ | 在线观看国产| 亚洲三级av| 狠狠狠狠操| 精品国产免费无码久久噜噜噜AV| Chinese搡老女人| 国产亚洲视频在线观看视频| 日韩无码精品一区二区三区| 久久性视频| 欧美少妇做爱| 亚洲中文字幕免费观看| 欧美精品三区| 国产色情在线观看| 韩国一区二区三区在线观看| 黄色一级免费看| 国产剧情一区二区av在线观看| 激情无码一区二区三区| 免费毛片基地| 草草影院第一页YYCCC| 一级特黄大片录像i| 亚洲AV无码精品岛国| 大香蕉超碰在线| 91人妻无码一区二区久久| 久久这里只有精品9| 婷婷五月丁香六月| 亚洲成人在线免费| 亚洲三级免费| 黄色免费AV| 婷婷中文在线| 亚洲xxxxxx| 欧一美一婬一伦一区二区三区黑人| 四季AV一区二区凹凸懂色桃花| 黑人猛躁白人BBBBBBBBB| 黑巨茎大战欧美白妞| 特级西西444www无码视频免费看 | 亚洲精品乱码久久久久久按摩观 | 欧美日韩国产91| 日本黄色免费| 猛男大粗猛爽h男人味| 久久无码一区| 日韩午夜在线观看| 黄色片在线免费看| 操逼激情视频| av高清| 亚洲综合网在线观看| 激情丁香| 亚洲精品久久久久久久蜜桃| 国产成人AV网站| 日本A一级片| 麻豆mdapp01.tⅴ| 亚洲精品黄色电影| 91精品久久香蕉国产线看观看 | 亚洲AV黄片| 操逼视频在线观看| 成人久久av| 国产精品久久| 东方AV在线播放| 国内操逼视频| 99精品免费观看| 四虎永久在线精品无码| 天天搞天天搞| 操骚B| 中文字幕在线网| 精品伊人大香蕉| 国产黄色视频免费| 久久黄片视频| 97久久精品国产熟妇高清网| 国产91白丝在线播放| 午夜黄色| 天堂va欧美va亚洲va在线| 五月影院| 久99视频| 欧一美一婬一伦一区二区三区| 91偷拍视频| 久热免费视频在线观看| 久操播放器| 欧美日韩大香蕉| 亚洲成人在线一区| 亚洲免费视频在线| 97人妻精品一区二区三区免 | 九九色热| 日韩在线不卡| 欧洲第一无人区观看| 色老板免费精品无码免费视频| 性亚洲| 95四川乱子伦视频国产| 亚洲视频在线看| 黄色A片免费视频| 黄色视频在线观看亚洲一区二区三区免费 | AV一区二区三区四区| 日韩无码2024| 国产视频导航| 五月婷婷婷婷| 高清色视频| AV天堂亚洲| 欧美精产国品一二三区别| 欧美日韩有码视频网址大全| 俺去久久| 99久久人妻无码中文字幕系列| av高清无码| 俺去俺来WWW色官方| 欧美日韩伊人| 日韩欧美性爱| 日韩成人三级片| 欧美一区三区视频z| 91亚洲精品在线| 精品伊人久久| AV在线不卡中文| 99在线精品视频免费观看20| 无码精品黑人| 亚洲精品秘一区二区三区蜜桃久| 天堂资源在线观看| 国产一级影院| 国产精品美女毛片真酒店| 啊啊啊啊啊在线观看| 日本伊人在线综合视频| 久久AV秘一区二区三区水生| 久一在线| 黄片网站在线观看| 人妻熟妇乱子伦精品无码专区毛片| 91区视频| 国产精品的电影| 在线天堂av| 无套内射在线| 国产激情都市一区二区三区欧美| 巜痴漢電車~凌脔版2| 国产思思99re99在线观看| 国产人人操| 亚洲精品A| 69AV网站| 99热在线免费观看| 北条麻妃无码一区二区| 开心黄色网| www.97yy| 国产日韩一区| 免费黄网站在线观看| 麻豆蜜桃wwww精品无码| 99视频精品在线| 大香蕉在8线| 免费欧美三级片| 黄色动态视频| 欧美A色| 99色亚洲| 91青青| 色老板视频在线观看| 国产欧美精品一区二区三区| 久久免费黄色视频| 欧美成人黄色A片| A级黄色毛片| 日韩欧美一区二区三区不卡| 99一区二区| 开心激情婷婷| 久久国产偷拍| 在线观看中文字幕av| 亲子伦视频一区二区三区| 国产婬片一级A片AAA毛片AⅤ | 中文无码一区二区三区| 青青草网址| 在线观看免费完整版中文字幕视频| 99在线观看精品视频| 99免费在线视频| 欧美色色影院| 成人免费观看视频| 成人在线欧美| 人人妻人人躁人人DVD| 露脸偷拍AV2025| 久热精品在线观看| 免费无码又爽又黄又刺激网站| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 少妇高潮视频| 精品在线第一页| 国产精品免费网站| 精品少妇视频| 亚洲高清无码专区| 亚洲在线高清| 在线播放一区二区三区| 国产婷婷色一区二区| 日韩精品久久| 日韩无| 亚洲婷婷综合网| 国产欧美视频在线| www黄色视频| 91麻豆精品国产91久久久吃药| 中文无码一区二区三区四区| 综合插插| 五月婷婷在线观看| 色逼| 国色天香网站| 伊人久久大香蕉国产| 4虎亚洲人成人网www| 亚洲玖玖爱| 99久在线精品99re8| 天天日日干| 狠狠操狠狠色| 综合久久99| 先锋影音资源AV| 国产内射久久| 啊啊嗯嗯视频| 人人草人人爱| 成人AA片| 人人色人人操人人干| 人人操人人妻人人看| 丝袜足交视频在线观看| 天天干天天射天天操| 日本三级中文字幕| 青娱乐精品在线| 日本中文字幕精品| 六月丁香五月| 国产一区二区精品| 91久操| 久久久久久久97| 美女特黄视频| 亚洲一区无码在线观看| 国产亚洲久一区二区| 成人做爰A片一区二区app | 丁香花激情网| 欧美一级高清片免费一级a| 亚洲精品成人片在线观看精品字幕| 九九热精品在线视频| 18禁一区| 婷婷精品在线视频| 亚洲人成人无码.www粉色| 超碰997| 成人在线乱码视频| 久久精品三级片| a黄色片| 男女做爱网站| 国产女人在线视频| 91av导航| 午夜大黄片| 欧美激情伊人久久五月天| 亚洲a在线观看| 日韩黄色无码视频| 99久久婷婷国产综合精品漫| 日韩,变态,另类,中文,人妻| 亚洲免费视频网站| 久操手机在线| 色色网站免费| 亚洲av免费| 韩国久久久| 黄片免费看视频| 欧美高清无码在线观看| 国产1区2区3区中文字幕| 在线观看国产一级片| 亚洲高潮| 骚逼视频聊天记录| 天天做天天爱| 爱搞在线观看| 天天综合网久久综合网| 国产免费一级片| 成人网站www污污污网站公司| 色欲AV秘无码一区二区三区| 一区二区中文| 日韩高清色| 成人大战香蕉最新视频| 精品在线播放| 色婷婷电影| 九色PORNY国产成人| 欧美久久精品| 欧美成人高清视频| 亚洲欧洲日韩综合| 超碰操一操| 在线观看中文字幕一区| 91大屁股| 99久久精彩视频| 久久久中文字幕| www.色999| www久久久| 婷婷啪啪| 人人妻人人爽人人操| 黄骗免费网站| 狼友视频在线免费观看| 亚州无码一区| 国产第一精品| 亚洲精品秘一区二区三区在线观看| 操屄在线观看| 亚洲3p| 成人福利视频在线| 一区二区三区国产精品| 精品AV国产| 日本无码视频在线观看毒| 四虎无码丰满人妻| 91在线观看| 国产一级视频| 成人久久| www.bbbb| 操逼动漫| 人人干人人爽| 国产一区在线视频| 91小宝寻花一区二区三区三级| 天天日天天干天天干| 亚洲成人精品在线| 天天视频黄色| 久久久久电影| 中文字幕欧美视频| 婷婷激情av| 国产精品成人免费视频| 日韩A片在线| 婷婷国产精品视频| 五月丁香婷婷基地| 操日本女人逼| 欧美操逼大片| 国产一级a毛一级a毛观看视频网站www.jn | 91干| 四虎精品成人无码A片| 四lll少妇BBBB槡BBBB| 东北女人操逼视频| 一级国产欧美成人A片| 国产第一页在线播放| 在线观看日韩av| 国产网址| 成人欧美在线观看| 欧美一级AA大片免费看视频| 五月丁香婷婷色色| 成人网站无码| 欧美亚洲图区| ThePorn-成人网站入口| 黄色电影天堂| 五月天亚洲色图| 成年女人免费视频| 久久国产激情| a天堂8在线资源| 深夜福利18| 国产成人在线免费| 爱爱成人视频| 成人性爱在线| 日韩精品一二三| 91精品国产综合久久蜜臀使用方法| 图片区小说区区亚洲五月| 欧美囗交荫蒂AAAA| 无码AV在线观看| 一级特黄大片录像i| 高清无码视频在线免费观看| 欧美日韩A| 日韩一级免费视频| 久草综合在线| www.天天日| 成人777| 夜夜国自一区| 狠狠狠狠狠| 亚洲人成电影| 驲韩在线视频免费观看| 91麻豆福利在线观看| 天天日天天操天天| 最新中文字幕观看| 在线天堂v| 五月天四房播播| 精品人人操| 日本在线免费视频| 五月婷婷导航| 亚洲vs无码秘蜜桃| AV免费网址| 中文解说AⅤ水果派| 无码人妻精品一区二区三区蜜臀百度 | 瑟瑟视频在线观看| 欧一美一婬一伦一区| 伊人午夜| 内射午夜福利在线免费观看视频| 亚洲永久在线| 人妻无码精品久久人妻成人| 香蕉成人网站在线观看| 99热官网| 国产乱╳╳AⅤ毛片| 91亚洲精品国偷拍自产在线观看| 51妺嘿嘿午夜福利在线| 在线免费看黄色视频| 国产娇小13videos糟蹋| 狠狠五月| 国产777777| 日韩A片一级无码免费蜜桃| 底流量AV电影在线| 在线观看免费视频无码| 男人操女人视频网站| 日本99视频| 国产尤物| 日韩偷拍网| 免费看成人A片无码照片88hⅤ| 中国九九盗摄偷拍偷看| 爱爱毛片| 国产精品视频| 一级大毛片| 日韩在线高清视频| av播播| 日韩人妻无码电影| www.日本黄色视频| 无码狠狠躁久久久久久久91| 色播五月婷婷| av无码在线观看| 999高清无码| 蜜桃视频免费网站| 蜜桃影院| 青草视频网| 青青色在线观看| 九色在线观看| 欧美a在线| 国产AV无码区亚洲| 91在线无码视频| 日韩激情一区二区| 色片无码| 午夜99| 国产成人免费在线观看| 黄片网站免费观看| 亚洲福利一区二区| 青草在线视频| 中国操逼毛片| 曰曰摸日日碰| 国产福利免费| 人妻FrXXeeXXee护士| 插逼综合网| 蜜臀AV一区二区三区免费看| 人人操人人看人人干| 天天日日日干| 欧洲美一区二区三区亚洲| 97黄片| 五月婷婷色色| 久久久一区二区三区| 在线观看2区| 嫩BBB搡BBB搡BBB四川| 玖玖在线播放| 操逼网首页| 亚州毛片| 蜜桃传媒一区二区| 黄p网站| 99久久精品国产成人一区二区| 婷婷丁香六月天| 欧美一级婬片AAAA毛片| 亚洲成人在线免费观看| 欧美三级在线| 久久三级片电影| 免费电影日本黄色| 成人免费视频一区二区| 性爱二区| 插菊花综合网1| 亚洲午夜精品久久久久久APP| 欧美国产中文| 久久九九综合| 亚洲电影av| 久久黄色网| 无码人妻丰满熟妇精品区| 人人妻人人躁人人DVD| 三级片网站在线观看| 91干| 伊人在线观看视频| 欧美九九九九| 日韩福利一区| 中文字幕高清无码在线观看| 7799精品| 无码国产精品一区二区| 成人性生交大片免费看小芳| 免费在线看A| 97黄片| AV麻豆| 九九热播精品| 亚洲三级在线免费观看| 初尝人妻滑进去了莹莹视频| 乱子伦】国产精品| 在线免费观看黄色视频| 中国人妻HDbute熟睡| 另类欧美| 男人亚洲天堂| 久操AV| 天堂网视频| 日韩无码人妻一区| 久久牛牛| 天天做天天爱天天爽| 91视频在线| 国产女人18水真多18精品| 精品国产重口乱子伦| 四川BBB搡BBB搡多人乱| 91精品婷婷国产综合久久韩漫| 中文字幕一二三| 欧美色色视频| 一区二区视频在线| www.蜜桃| 精品成人无码一区二区三区| 国产精品高| 黄色小网站在线观看| 亚洲视频在线观看| 亚洲无码中文字幕视频| 毛片黄色视频| 欧美一级一级| 婷婷色色五月天图片| 天天操夜夜操狠狠| 中文字幕亚洲高清| AV电影在线观看| 天天摸天天添| 91豆花成人社区| 99久在线精品99re8热| 一区二区三区精品| 人妻无码精品蜜桃| 色综合久久久无码中文字幕999 | 国产一区在线播放| 97精品欧美91久久久久久久| 国产精品观看| 国产欧美综合精品| 老女人肏屄视频| 日韩区一中文字幕a∨| 色色9999| 无套免费视频欧美| 国产69精品久久| 日韩经典无码| 北条麻妃无码在线| av无码不卡| 性无码一区二区三区在线观看| 婷婷中文字幕| 一区无码免费| 无码人妻一区二区三区在线视频不卡 | 国产AⅤ| 成年人性生活免费视频| 91精品国产一区二区三区| 97人妻视频| 久久久久久97电影院电影院无码 | 好爽~要尿了~要喷了~同桌| 午夜探花在线观看| 国产一二三视频| 天天色网站| 日本亲子乱婬一级A片| 黄色美女视频网站| 中国A级片| 日本精品在线播放| 狠狠干大香蕉| 国产一级精品视频| 91无码人妻精品1国产四虎| 亚洲国产成人电影| 在线观看亚洲| 欧美亚洲精品在线| 日日干天天射| 男人天堂手机视频| 欧美性猛交XXXXⅩXX| 女生自慰网站在线观看| 人妻无码中文久久久久专区 | 国产a片视频| 日韩免费中文字幕| 国产黄色小视频在线观看| 狼友无码| 国产激情视频在线免费观看| 熟女少妇一区二区| 亚洲国产精品久久人人爱| 久久久999精品视频| 麻豆91精品91久久久| 人人干人人摸人人操| 免费无码婬片A片AA片| 91蜜桃在线观看| 无码免费播放| 亚洲高清无码一区二区| 亚洲午夜在线观看|