精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

全方位帶你掌握 Ref、Reactive,開啟 Vue3 響應式的大門

開發 前端
今天咱們就來全面盤點一下 Ref、Reactive,相信看完所有響應式問題都會迎刃而解,一起學起來吧!

不知道大家使用 Vue3 的時候有沒有這樣的疑惑,“ref、rective 都能創建一個響應式對象,我該如何選擇?”,“為什么響應式對象解構之后就失去了響應式?應該如何處理?” 今天咱們就來全面盤點一下 ref、reactive,相信看完所有響應式問題都會迎刃而解,一起學起來吧!

reactive()

基本用法

在 Vue3 中我們可以使用 reactive() 創建一個響應式對象或數組:

import { reactive } from 'vue'
const state = reactive({ count: 0 })

這個響應式對象其實就是一個 Proxy, Vue 會在這個 Proxy 的屬性被訪問時收集副作用,屬性被修改時觸發副作用。

要在組件模板中使用響應式狀態,需要在 setup() 函數中定義并返回。

<script>
import { reactive } from 'vue'

export default {
setup() {
const state = reactive({ count: 0 })
return {
state
}
}
}
</script>

<template>
<div>{{ state.count }}</div>
</template>

當然,也可以使用 <script setup> ,<script setup> 中頂層的導入和變量聲明可以在模板中直接使用。

<script setup>
import { reactive } from 'vue'

const state = reactive({ count: 0 })
</script>

<template>
<div>{{ state.count }}</div>
</template>

響應式代理 vs 原始對象

reactive() 返回的是一個原始對象的 Proxy,他們是不相等的:

const raw = {}
const proxy = reactive(raw)

console.log(proxy === raw) // false

原始對象在模板中也是可以使用的,但修改原始對象不會觸發更新。因此,要使用 Vue 的響應式系統,就必須使用代理。

<script setup>
const state = { count: 0 }
function add() {
state.count++
}
</script>

<template>
<button @click="add">
{{ state.count }} <!-- 當點擊button時,始終顯示為 0 -->
</button>
</template>

為保證訪問代理的一致性,對同一個原始對象調用 reactive() 會總是返回同樣的代理對象,而對一個已存在的代理對象調用 reactive() 會返回其本身:

const raw = {}
const proxy1 = reactive(raw)
const proxy2 = reactive(raw)

console.log(proxy1 === proxy2) // true

console.log(reactive(proxy1) === proxy1) // true

這個規則對嵌套對象也適用。依靠深層響應性,響應式對象內的嵌套對象依然是代理:

const raw = {}
const proxy = reactive({ nested: raw })
const nested = reactive(raw)

console.log(proxy.nested === nested) // true

shallowReactive()

在 Vue 中,狀態默認都是深層響應式的。但某些場景下,我們可能想創建一個 淺層響應式對象 ,讓它僅在頂層具有響應性,這時候可以使用 shallowReactive()

const state = shallowReactive({
foo: 1,
nested: {
bar: 2
}
})

// 狀態自身的屬性是響應式的
state.foo++

// 下層嵌套對象不是響應式的,不會按期望工作
state.nested.bar++

注意:淺層響應式對象應該只用于組件中的根級狀態。避免將其嵌套在深層次的響應式對象中,因為其內部的屬性具有不一致的響應行為,嵌套之后將很難理解和調試。

reactive() 的局限性

reactive() 雖然強大,但也有以下幾條限制:

1、 僅對對象類型有效(對象、數組和 MapSet 這樣的集合類型),而對 stringnumber 和 boolean 這樣的原始類型無效。

2、因為 Vue 的響應式系統是通過屬性訪問進行追蹤的,如果我們直接“替換”一個響應式對象,這會導致對初始引用的響應性連接丟失:

   <script setup>
import { reactive } from 'vue'

let state = reactive({ count: 0 })
function change() {
// 非響應式替換
state = reactive({ count: 1 })
}
</script>

<template>
<button @click="change">
{{ state }} <!-- 當點擊button時,始終顯示為 { "count": 0 } -->
</button>
</template>

3、將響應式對象的屬性賦值或解構至本地變量,或是將該屬性傳入一個函數時,會失去響應性:

   const state = reactive({ count: 0 })

// n 是一個局部變量,和 state.count 失去響應性連接
let n = state.count
// 不會影響 state
n++

// count 也和 state.count 失去了響應性連接
let { count } = state
// 不會影響 state
count++

// 參數 count 同樣和 state.count 失去了響應性連接
function callSomeFunction(count) {
// 不會影響 state
count++
}
callSomeFunction(state.count)

為了解決以上幾個限制,ref 閃耀登場了!

ref()

Vue 提供了一個 ref() 方法來允許我們創建使用任何值類型的響應式 ref 。

基本用法

ref() 將傳入的參數包裝為一個帶有 value 屬性的 ref 對象:

import { ref } from 'vue'
const count = ref(0)
console.log(count) // { value: 0 }
count.value++
console.log(count.value) // 1

和響應式對象的屬性類似,ref 的 value 屬性也是響應式的。同時,當值為對象類型時,Vue 會自動使用 reactive() 處理這個值。

一個包含對象的 ref 可以響應式地替換整個對象:

<script setup>
import { ref } from 'vue'

let state = ref({ count: 0 })
function change() {
// 這是響應式替換
state.value = ref({ count: 1 })
}
</script>

<template>
<button @click="change">
{{ state }} <!-- 當點擊button時,顯示為 { "count": 1 } -->
</button>
</template>

ref 從一般對象上解構屬性或將屬性傳遞給函數時,不會丟失響應性:

const state = {
count: ref(0)
}
// 解構之后,和 state.count 依然保持響應性連接
const { count } = state
// 會影響 state
count.value++

// 該函數接收一個 ref, 和傳入的值保持響應性連接
function callSomeFunction(count) {
// 會影響 state
count.value++
}
callSomeFunction(state.count)

ref() 讓我們能創建使用任何值類型的 ref 對象,并能夠在不丟失響應性的前提下傳遞這些對象。這個功能非常重要,經常用于將邏輯提取到 組合式函數 中。

// mouse.js
export function useMouse() {
const x = ref(0)
const y = ref(0)

// ...
return { x, y }
}
<script setup>
import { useMouse } from './mouse.js'
// 可以解構而不會失去響應性
const { x, y } = useMouse()
</script>

ref 的解包

所謂解包就是獲取到 ref 對象上 value 屬性的值。常用的兩種方法就是 .value 和 unref()。 unref() 是 Vue 提供的方法,如果參數是 ref ,則返回 value 屬性的值,否則返回參數本身。

1、ref 在模板中的解包

當 ref 在模板中作為頂層屬性被訪問時,它們會被自動解包,不需要使用 .value 。下面是之前的例子,使用 ref() 代替:

<script setup>
import { ref } from 'vue'

const count = ref(0)
</script>

<template>
<div>
{{ count }} <!-- 無需 .value -->
</div>
</template>

還有一種情況,如果文本插值(` `)計算的最終值是 ref ,也會被自動解包。下面的非頂層屬性會被正確渲染出來。

<script setup>
import { ref } from 'vue'

const object = { foo: ref(1) }

</script>

<template>
<div>
{{ object.foo }} <!-- 無需 .value -->
</div>
</template>

其他情況則不會被自動解包,如:object.foo 不是頂層屬性,文本插值(` `)計算的最終值也不是 ref:

const object = { foo: ref(1) }

下面的內容將不會像預期的那樣工作:

<div>{{ object.foo + 1 }}</div>

渲染的結果會是 [object Object]1,因為 object.foo 是一個 ref 對象。我們可以通過將 foo 改成頂層屬性來解決這個問題:

const object = { foo: ref(1) }
const { foo } = object
<div>{{ foo + 1 }}</div>

現在結果就可以正確地渲染出來了。

2、ref 在響應式對象中的解包

當一個 ref 被嵌套在一個響應式對象中,作為屬性被訪問或更改時,它會自動解包,因此會表現得和一般的屬性一樣:

const count = ref(0)
const state = reactive({ count })

console.log(state.count) // 0

state.count = 1
console.log(state.count) // 1

只有當嵌套在一個深層響應式對象內時,才會發生解包。當 ref 作為 淺層響應式對象 的屬性被訪問時則不會解包:

const count = ref(0)
const state = shallowReactive({ count })

console.log(state.count) // { value: 0 } 而不是 0

如果將一個新的 ref 賦值給一個已經關聯 ref 的屬性,那么它會替換掉舊的 ref:

const count = ref(1)
const state = reactive({ count })

const otherCount = ref(2)
state.count = otherCount

console.log(state.count) // 2
// 此時 count 已經和 state.count 失去連接
console.log(count.value) // 1

3、ref 在數組和集合類型的解包

跟響應式對象不同,當 ref 作為響應式數組或像 Map 這種原生集合類型的元素被訪問時,不會進行解包。

const books = reactive([ref('Vue 3 Guide')])
// 這里需要 .value
console.log(books[0].value)

const map = reactive(new Map([['count', ref(0)]]))
// 這里需要 .value
console.log(map.get('count').value)

toRef()

toRef 是基于響應式對象上的一個屬性,創建一個對應的 ref 的方法。這樣創建的 ref 與其源屬性保持同步:改變源屬性的值將更新 ref 的值,反之亦然。

const state = reactive({
foo: 1,
bar: 2
})

const fooRef = toRef(state, 'foo')

// 更改源屬性會更新該 ref
state.foo++
console.log(fooRef.value) // 2

// 更改該 ref 也會更新源屬性
fooRef.value++
console.log(state.foo) // 3

toRef() 在你想把一個 prop 的 ref 傳遞給一個組合式函數時會很有用:

<script setup>
import { toRef } from 'vue'

const props = defineProps(/* ... */)

// 將 `props.foo` 轉換為 ref,然后傳入一個組合式函數
useSomeFeature(toRef(props, 'foo'))
</script>

當 toRef 與組件 props 結合使用時,關于禁止對 props 做出更改的限制依然有效。如果將新的值傳遞給 ref 等效于嘗試直接更改 props,這是不允許的。在這種場景下,你可以考慮使用帶有 get 和 set 的 computed 替代。

注意:即使源屬性當前不存在,toRef() 也會返回一個可用的 ref。這讓它在處理可選 props 的時候非常有用,相比之下 toRefs 就不會為可選 props 創建對應的 refs 。下面我們就來了解一下 toRefs 。

toRefs()

toRefs() 是將一個響應式對象上的所有屬性都轉為 ref ,然后再將這些 ref 組合為一個普通對象的方法。這個普通對象的每個屬性和源對象的屬性保持同步。

const state = reactive({
foo: 1,
bar: 2
})

// 相當于
// const stateAsRefs = {
// foo: toRef(state, 'foo'),
// bar: toRef(state, 'bar')
// }
const stateAsRefs = toRefs(state)

state.foo++
console.log(stateAsRefs.foo.value) // 2

stateAsRefs.foo.value++
console.log(state.foo) // 3

從組合式函數中返回響應式對象時,toRefs 相當有用。它可以使我們解構返回的對象時,不失去響應性:

// feature.js
export function useFeature() {
const state = reactive({
foo: 1,
bar: 2
})

// ...
// 返回時將屬性都轉為 ref
return toRefs(state)
}
<script setup>
import { useFeature } from './feature.js'
// 可以解構而不會失去響應性
const { foo, bar } = useFeature()
</script>

toRefs 只會為源對象上已存在的屬性創建 ref。如果要為還不存在的屬性創建 ref,就要用到上面提到的 toRef

以上就是 ref、reactive 的詳細用法,不知道你有沒有新的收獲。接下來,我們來探討一下響應式原理。

響應式原理

Vue2 的限制

大家都知道 Vue2 中的響應式是采? Object.defineProperty() , 通過 getter / setter 進行屬性的攔截。這種方式對舊版本瀏覽器的支持更加友好,但它有眾多缺點:

  • 初始化時只會對已存在的對象屬性進行響應式處理。也是說新增或刪除屬性,Vue 是監聽不到的。必須使用特殊的 API 處理。
  • 數組是通過覆蓋原型對象上的7個?法進行實現。如果通過下標去修改數據,Vue 同樣是無法感知的。也要使用特殊的 API 處理。
  • 無法處理像 MapSet這樣的集合類型。
  • 帶有響應式狀態的邏輯不方便復用。

Vue3 的響應式系統

針對上述情況,Vue3 的響應式系統橫空出世了!Vue3 使用了 Proxy 來創建響應式對象,僅將 getter / setter 用于 ref ,完美的解決了上述幾條限制。下面的代碼可以說明它們是如何工作的:

function reactive(obj) {
return new Proxy(obj, {
get(target, key) {
track(target, key)
return target[key]
},
set(target, key, value) {
target[key] = value
trigger(target, key)
}
})
}

function ref(value) {
const refObject = {
get value() {
track(refObject, 'value')
return value
},
set value(newValue) {
value = newValue
trigger(refObject, 'value')
}
}
return refObject
}

不難看出,當將一個響應性對象的屬性解構為一個局部變量時,響應性就會“斷開連接”。因為對局部變量的訪問不會觸發 get / set 代理捕獲。

我們回到響應式原理。在 track() 內部,我們會檢查當前是否有正在運行的副作用。如果有,就會查找到存儲了所有追蹤了該屬性的訂閱者的 Set,然后將當前這個副作用作為新訂閱者添加到該 Set 中。

// activeEffect 會在一個副作用就要運行之前被設置
let activeEffect

function track(target, key) {
if (activeEffect) {
const effects = getSubscribersForProperty(target, key)
effects.add(activeEffect)
}
}

副作用訂閱將被存儲在一個全局的 WeakMap<target, Map<key, Set<effect>>> 數據結構中。如果在第一次追蹤時沒有找到對相應屬性訂閱的副作用集合,它將會在這里新建。這就是 getSubscribersForProperty() 函數所做的事。

在 trigger() 之中,我們會再次查找到該屬性的所有訂閱副作用。這一次我們全部執行它們:

function trigger(target, key) {
const effects = getSubscribersForProperty(target, key)
effects.forEach((effect) => effect())
}

這些副作用就是用來執行 diff 算法,從而更新頁面的。

這就是響應式系統的大致原理,Vue3 還做了編譯器的優化,diff 算法的優化等等。不得不佩服尤大大,把 Vue 的響應式系統又提升了一個臺階!

ok,今天的分享就到這里,不知道你對 ref、reactive 是不是有了更加深入的了解呢,歡迎在評論區留言。如果覺得有點,記得點贊支持一哈!

責任編輯:姜華 來源: 今日頭條
相關推薦

2025-07-31 09:01:07

2025-07-31 09:05:38

2010-08-04 14:15:44

nfs服務

2021-12-02 05:50:35

Vue3 插件Vue應用

2024-04-11 13:10:00

Vue3Reactive響應性

2025-08-06 13:39:39

Vue3React響應性

2022-06-26 00:00:02

Vue3響應式系統

2021-12-28 08:46:00

Vue3refreactive

2021-09-27 06:29:47

Vue3 響應式原理Vue應用

2023-08-09 10:21:07

Vue 3Reactive

2023-02-06 08:39:01

PreactVue3響應式

2022-07-12 08:14:15

vue3refIsRef

2025-02-17 08:58:06

2023-12-06 07:43:56

Vue如何定義事件

2022-01-19 18:05:47

Vue3前端代碼

2020-06-09 11:35:30

Vue 3響應式前端

2023-06-13 08:01:27

qwikSolidJS?reactive

2016-12-14 14:43:11

ButterknifeAndroid

2011-06-22 16:51:05

打印機購買指導

2016-02-26 15:22:15

AngularJS
點贊
收藏

51CTO技術棧公眾號

亚洲无人区码一码二码三码的含义| 69174成人网| 国产午夜精品久久久久久久久| 成人一级视频| 亚洲天堂久久久久久久| 国产亚洲第一区| 中文字幕在线2018| 日韩午夜电影| 久久久国产精品免费| 国产精品久久不卡| 精品国产三级| 在线观看免费亚洲| 国产亚洲黄色片| aaa日本高清在线播放免费观看| 国产精品香蕉一区二区三区| 日本电影亚洲天堂| 久青草免费视频| 91蜜臀精品国产自偷在线| 精品视频一区在线视频| 91视频这里只有精品| 英国三级经典在线观看| 亚洲激情图片qvod| 一区二区精品视频| 久久伊伊香蕉| 97se狠狠狠综合亚洲狠狠| 91精品视频在线看| 国产乡下妇女三片| 亚洲一区不卡| 午夜免费久久久久| 99热精品免费| 国产精品精品国产一区二区| 亚洲香蕉成人av网站在线观看| 欧洲熟妇的性久久久久久| 日韩久久99| 在线一区二区视频| 免费在线观看的av网站| 91九色在线看| 午夜精品一区二区三区免费视频| 中国 免费 av| 黄色免费在线观看| 中文字幕一区在线| 亚洲一二三区精品| 91看片在线观看| 国产亚洲制服色| 欧美一区二区三区在线播放 | www.av天天| 偷拍自拍亚洲色图| 日韩激情第一页| 日韩精品一区二区三区高清免费| aiss精品大尺度系列| 日韩欧美亚洲国产精品字幕久久久| 老司机久久精品| 日韩一级特黄| 在线播放91灌醉迷j高跟美女 | 国产91富婆露脸刺激对白| 91在线观看免费观看| 国产精品久久久久久免费免熟 | 伊人狠狠色j香婷婷综合| 欧美大胆a视频| 国产1区2区3区4区| 欧美 日韩 国产 一区| 欧美成人免费一级人片100| 日韩欧美综合视频| 欧美视频成人| 91国产一区在线| 久草手机在线视频| 免费在线观看精品| 91欧美激情另类亚洲| www.麻豆av| 99精品视频在线观看| 精品一卡二卡三卡四卡日本乱码| 青青青手机在线视频观看| 久久嫩草精品久久久精品| 亚洲精品欧洲精品| 97caopron在线视频| 亚洲二区在线视频| 蜜臀久久99精品久久久酒店新书| 欧美日韩不卡| 欧美一级欧美三级在线观看| 人妻体体内射精一区二区| 高潮按摩久久久久久av免费| 亚洲欧美一区二区激情| 亚洲国产精品一区二区久久hs| 66视频精品| 91豆花精品一区| 中文字幕网址在线| 成人午夜又粗又硬又大| 欧美一区二区三区精美影视| 国产原创精品视频| 五月激情丁香一区二区三区| 99热这里只有精品在线播放| 亚洲精品大全| 日韩精品黄色网| 暗呦丨小u女国产精品| 亚洲韩日在线| 国产精品视频导航| 动漫av一区二区三区| 五月天六月丁香| 亚洲波多野结衣| 国语精品一区| 国产精品久久久av久久久| 国产乱叫456在线| 久久天堂av综合合色蜜桃网| 小说区视频区图片区| 久久久男人天堂| 在线成人高清不卡| 丰满少妇一区二区| 欧美视频福利| 国产啪精品视频网站| 天堂在线视频网站| 亚洲乱码一区二区三区在线观看| 久久综合久久色| 国产精品传媒| а√天堂资源地址在线下载| 亚洲欧美日韩国产综合| 情侣黄网站免费看| 999在线精品| 久久婷婷国产麻豆91天堂| 波多野结衣高清在线| 99这里只有久久精品视频| 久久久久久久久网| 欧美成人黄色| 一区二区三区天堂av| 91香蕉在线视频| 国产成人精品影院| 自拍偷拍一区二区三区| 51一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 精品处破女学生| 国产乱妇无码大片在线观看| 亚洲高清视频在线观看| 亚洲欧洲日本韩国| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 国产一区二区三区免费在线观看| 日本日本精品二区免费| 日韩在线伦理| 亚洲国产精品va在线观看黑人| 紧身裙女教师波多野结衣| 久久www免费人成看片高清| 日韩中文一区| 91在线亚洲| 尤物九九久久国产精品的特点| 成人公开免费视频| 26uuu亚洲综合色欧美| 精品国产免费av| 日韩高清三区| 奇米4444一区二区三区| 日韩资源在线| 日韩欧美中文第一页| 欧美熟妇精品黑人巨大一二三区| 99这里有精品| 裸模一区二区三区免费| 亚洲欧美一区二区三区| 一道本无吗dⅴd在线播放一区| 中文区中文字幕免费看| 中文字幕一区二区三区四区不卡 | 波多野结衣综合网| 日韩精选在线| 国产经典一区二区| 欧美激情二区| 日韩欧美国产一区二区三区| 国产亚洲自拍av| 久久综合久久综合亚洲| 亚洲污视频在线观看| 欧美独立站高清久久| **亚洲第一综合导航网站| 国产www视频在线观看| 日韩经典中文字幕| 中文字幕欧美人妻精品一区蜜臀| 亚洲人成在线播放网站岛国| 国产成人av片| 国产欧美一区二区色老头| 日韩中文不卡| 日韩免费一级| 欧美中文字幕视频| 麻豆传媒视频在线观看| 欧美精品一区视频| 波多野结衣爱爱| 亚洲欧美日韩国产综合在线| 国产51自产区| 日韩经典一区二区| 国产一区二区三区播放| 任我爽精品视频在线播放| 国产精品久久久久不卡| 天堂av中文在线| 亚洲人成网站777色婷婷| 国产婷婷在线视频| 色综合久久中文字幕综合网 | 91福利在线导航| 欧美日韩国产成人在线91| 精品一区二区三区蜜桃在线| 国产一区二区精品在线观看| 僵尸世界大战2 在线播放| 欧美亚洲国产一区| 国产精品10p综合二区| 日本欧美一区| 久久久久久久国产精品视频| 国产黄在线观看免费观看不卡| 欧美一级欧美一级在线播放| 欧美日韩在线观看一区二区三区| 日韩免费在线电影| 69av视频在线播放| 高清免费电影在线观看| 亚洲视频日韩精品| 性生交大片免费看女人按摩| 在线观看亚洲精品视频| 日韩成人在线免费视频| 国产精品第五页| 天天躁日日躁aaaa视频| a级精品国产片在线观看| 国产欧美一区二| 日日夜夜免费精品视频| 亚洲中文字幕无码av永久| 午夜影院欧美| 日本高清不卡一区二区三| 国产精品17p| 亚洲一区二区三区xxx视频| 91成人在线| 日韩免费在线播放| yellow字幕网在线| 欧美成人剧情片在线观看| 中文字幕在线播放| 日本肉肉一区| 亚洲国产美女搞黄色| 受虐m奴xxx在线观看| 国产999精品久久| 怡红院亚洲色图| 免费精品视频| 国产精品久久中文字幕| 一本一道久久综合狠狠老| 国产主播一区二区三区四区| 久久伊人影院| 91美女福利视频高清| 成人一区视频| 国产精品久久久久久久久影视| 筱崎爱全乳无删减在线观看| 福利一区视频| 久久国产精品久久久久| 1769视频在线播放免费观看| 亚洲天堂网在线观看| 色视频在线看| 亚洲嫩模很污视频| 九九热视频在线观看| 精品亚洲男同gayvideo网站| 亚洲av成人精品一区二区三区在线播放 | 亚洲伊人婷婷| 婷婷亚洲五月色综合| 在线不卡日本| 欧美在线二区| 国产a级黄色大片| 伊人影院久久| www.中文字幕在线| 久久午夜电影| www欧美激情| 精品中文字幕一区二区小辣椒| 182午夜在线观看| 国产一区在线看| 中文字幕无人区二| av色综合久久天堂av综合| 91精彩刺激对白露脸偷拍| 久久亚洲免费视频| 国产精品1区2区3区4区| 亚洲色图在线看| 免费中文字幕在线观看| 性久久久久久久| 91精品国产综合久久久蜜臀九色| 一本色道亚洲精品aⅴ| 波多野结衣人妻| 欧美一级高清大全免费观看| 亚洲av综合色区无码一二三区 | 成人免费看吃奶视频网站| 日韩高清一区| 久久人人九九| 三级电影一区| 国产一线二线三线女| 先锋a资源在线看亚洲| 校园春色 亚洲色图| 国产成人av福利| 亚洲自拍偷拍一区二区| 亚洲欧洲精品一区二区三区| 久久9999久久免费精品国产| 色综合av在线| 国产黄色av网站| 精品一区二区电影| 精产国品自在线www| 午夜精品福利电影| 日韩欧国产精品一区综合无码| 国产高清自拍一区| 欧美日韩在线播放视频| 日本精品福利视频| 久久久人人人| 精品无码av一区二区三区不卡| 久久天天做天天爱综合色| 91插插插插插插| 欧美性xxxx| 国产同性人妖ts口直男| 亚洲欧美国产精品| dy888亚洲精品一区二区三区| 91精品国产电影| 高清不卡一区| 欧美污视频久久久| 欧美激情精品久久久六区热门| 精品一卡二卡三卡| 国产成人精品三级麻豆| 一区二区三区久久久久| 亚洲成av人片在线| 国产又大又粗又长| 亚洲图片在区色| 美女高潮视频在线看| 亚洲伊人成综合成人网| 深爱激情久久| 999在线观看视频| 国产麻豆精品久久一二三| 在线小视频你懂的| 午夜精品福利一区二区三区蜜桃| 亚洲天堂网视频| 亚洲视频第一页| 不卡专区在线| 91丝袜脚交足在线播放| 日韩欧美国产精品综合嫩v| 无码精品a∨在线观看中文| 国产精品综合视频| 永久免费看mv网站入口| 91精品福利在线| 天堂av电影在线观看| 久久久久久国产精品| 欧美区一区二区| 欧美少妇一区二区三区| 久久激情五月激情| av在线播放中文字幕| 在线日韩国产精品| 国产资源在线看| 青草青草久热精品视频在线网站 | caoporn成人免费视频在线| 一区二区免费电影| 久久99国产精品免费| 国产福利在线导航| 欧美日韩激情一区二区| 福利在线观看| 国产精品久久久久久久久久久不卡| 日韩在线你懂的| 人妻精品无码一区二区三区 | 黄色一级视频免费观看| 欧美一区二区三区电影| 国产理论在线观看| 91在线观看免费高清| 欧美一区在线看| 亚洲欧美日韩中文字幕在线观看| 亚洲蜜臀av乱码久久精品| 国产av一区二区三区| 欧美大片欧美激情性色a∨久久| 麻豆精品久久| 亚洲精品久久久久久久蜜桃臀| 粉嫩在线一区二区三区视频| 精品少妇theporn| 亚洲国产精品人久久电影| 在线观看欧美日韩电影| 欧美在线播放一区| 麻豆91在线播放免费| 成人在线观看免费完整| 欧美mv日韩mv亚洲| 涩涩av在线| 亚洲免费视频一区| 国产在线播放一区| 国产午夜福利一区二区| 亚洲欧美中文字幕| 国产激情久久| 日本道在线视频| 成人91在线观看| 中文字幕免费高清网站| 久久久精品视频在线观看| 97一区二区国产好的精华液| 2022亚洲天堂| 国产精品久久久久久久久免费桃花| av观看在线免费| 欧美孕妇毛茸茸xxxx| 91中文字幕精品永久在线| 熟女人妻一区二区三区免费看| 欧美日韩美女在线| 黄色一级片在线观看| 精品国产乱码久久久久久丨区2区| 久久国产精品毛片| 国产精品99久久久久久成人| 亚洲国产女人aaa毛片在线| 韩日一区二区| 精品久久久久久无码中文野结衣| 久久精品亚洲一区二区三区浴池| 国产精品探花视频| 日本久久久久久久久| 欧美久久99| 91视频免费看片| 日韩精品视频免费在线观看| 亚洲免费一区| 激情综合在线观看| 亚洲另类中文字| 国产精品一级伦理| 国产日韩一区二区| 久久电影国产免费久久电影| 久久久久久久久久影院| 日韩在线中文字幕|