久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Redux 进阶 - react 全家桶学习笔记(二)

發布時間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redux 进阶 - react 全家桶学习笔记(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:這篇是17年1月的文章,搬運自本人 blog...

https://github.com/BuptStEve/...

零、前言

在上一篇中介紹了 Redux 的各項基礎 api。接著一步一步地介紹如何與 React 進行結合,并從引入過程中遇到的各個痛點引出 react-redux 的作用和原理。

不過目前為止還都是紙上談兵,在日常的開發中最常見異步操作(如通過 ajax、jsonp 等方法 獲取數據),在學習完上一篇后你可能依然沒有頭緒。因此本文將深入淺出地對于 redux 的進階用法進行介紹。

一、中間件(MiddleWare)

It provides a third-party extension point between dispatching an action, and the moment it reaches the reducer. ———— by Dan Abramov

這是 redux 作者對 middleware 的描述,middleware 提供了一個分類處理 action 的機會,在 middleware 中你可以檢閱每一個流過的 action,挑選出特定類型的 action 進行相應操作,給你一次改變 action 的機會。

說得好像很吊...不過有啥用咧...?

1. 日志應用場景[[2]]

因為改變 store 的唯一方法就是 dispatch 一個 action,所以有時需要將每次 dispatch 操作都打印出來作為操作日志,這樣一來就可以很容易地看出是哪一次 dispatch 導致了異常。

1.1. 第一次嘗試:強行懟...

const action = addTodo('Use Redux');console.log('dispatching', action); store.dispatch(action); console.log('next state', store.getState());

顯然這種在每一個 dispatch 操作的前后都手動加代碼的方法,簡直讓人不忍直視...

1.2. 第二次嘗試:封裝 dispatch

聰明的你一定馬上想到了,不如將上述代碼封裝成一個函數,然后直接調用該方法。

function dispatchAndLog(store, action) {console.log('dispatching', action);store.dispatch(action);console.log('next state', store.getState()); }dispatchAndLog(store, addTodo('Use Redux'));

矮油,看起來不錯喲。

不過每次使用都需要導入這個額外的方法,一旦不想使用又要全部替換回去,好麻煩啊...

1.3. 第三次嘗試:猴子補丁(Monkey Patch)

在此暫不探究為啥叫猴子補丁而不是什么其他補丁。

簡單來說猴子補丁指的就是:以替換原函數的方式為其添加新特性或修復 bug。

let next = store.dispatch; // 暫存原方法store.dispatch = function dispatchAndLog(action) {console.log('dispatching', action);let result = next(action); // 應用原方法console.log('next state', store.getState());return result; };

這樣一來我們就“偷梁換柱”般的為原 dispatch 添加了輸出日志的功能。

1.4. 第四次嘗試:隱藏猴子補丁

目前看起來很不錯,然鵝假設我們又要添加別的一個中間件,那么代碼中將會有重復的 let next = store.dispatch; 代碼。

對于這個問題我們可以通過參數傳遞,返回新的 dispatch 來解決。

function logger(store) {const next = store.dispatch;return function dispatchAndLog(action) {console.log('dispatching', action);const result = next(action); // 應用原方法console.log('next state', store.getState());return result;} }store.dispatch = logger(store); store.dispatch = anotherMiddleWare(store);

注意到最后應用中間件的代碼其實就是一個鏈式的過程,所以還可以更進一步優化綁定中間件的過程。

function applyMiddlewareByMonkeypatching(store, middlewares) {// 因為傳入的是原對象引用的值,slice 方法會生成一份拷貝,// 所以之后調用的 reverse 方法不會改變原數組middlewares = middlewares.slice();// 我們希望按照數組原本的先后順序觸發各個中間件,// 所以最后的中間件應當最接近原本的 dispatch,// 就像洋蔥一樣一層一層地包裹原 dispatchmiddlewares.reverse();// 在每一個 middleware 中變換 store.dispatch 方法。middlewares.forEach((middleware) =>store.dispatch = middleware(store);); }// 先觸發 logger,再觸發 anotherMiddleWare 中間件(類似于 koa 的中間件機制) applyMiddlewareByMonkeypatching(store, [ logger, anotherMiddleWare ]);

so far so good~! 現在不僅隱藏了顯式地緩存原 dispatch 的代碼,而且調用起來也很優雅~,然鵝這樣就夠了么?

1.5. 第五次嘗試:移除猴子補丁

注意到,以上寫法仍然是通過 store.dispatch = middleware(store); 改寫原方法,并在中間件內部通過 const next = store.dispatch; 讀取當前最新的方法。

本質上其實還是 monkey patch,只不過將其封裝在了內部,不過若是將 dispatch 方法通過參數傳遞進來,這樣在 applyMiddleware 函數中就可以暫存 store.dispatch(而不是一次又一次的改寫),豈不美哉?

// 通過參數傳遞 function logger(store, next) {return function dispatchAndLog(action) {// ...} }function applyMiddleware(store, middlewares) {// ...// 暫存原方法let dispatch = store.dispatch;// middleware 中通過閉包獲取 dispatch,并且更新 dispatchmiddlewares.forEach((middleware) =>dispatch = middleware(store, dispatch);); }

接著應用函數式編程的 curry 化(一種使用匿名單參數函數來實現多參數函數的方法。),還可以再進一步優化。(其實是為了使用 compose 將中間件函數先組合再綁定)

function logger(store) {return function(next) {return function(action) {console.log('dispatching', action);const result = next(action); // 應用原方法console.log('next state', store.getState());return result;}} }// -- 使用 es6 的箭頭函數可以讓代碼更加優雅更函數式... -- const logger = (store) => (next) => (action) => {console.log('dispatching', action);const result = next(action); // 應用原方法console.log('next state', store.getState());return result; };function applyMiddleware(store, middlewares) {// ...let dispatch = store.dispatch;middlewares.forEach((middleware) =>dispatch = middleware(store)(dispatch); // 注意調用了兩次);// ... }

以上方法離 Redux 中最終的 applyMiddleware 實現已經很接近了,

1.6. 第六次嘗試:組合(compose,函數式方法)

在 Redux 的最終實現中,并沒有采用我們之前的 slice + reverse 的方法來倒著綁定中間件。而是采用了 map + compose + reduce 的方法。

先來說這個 compose 函數,在數學中以下等式十分的自然。

f(g(x)) = (f o g)(x)
f(g(h(x))) = (f o g o h)(x)

用代碼來表示這一過程就是這樣。

// 傳入參數為函數數組 function compose(...funcs) {// 返回一個閉包,// 將右邊的函數作為內層函數執行,并將執行結果作為外層函數再次執行return funcs.reduce((a, b) => (...args) => a(b(...args))); }

不了解 reduce 函數的人可能對于以上代碼會感到有些費解,舉個栗子來說,有函數數組 [f, g, h]傳入 compose 函數執行。

  • 首次 reduce 執行的結果是返回一個函數 (...args) => f(g(...args))
  • 接著該函數作為下一次 reduce 函數執行時的參數 a,而參數 b 是 h
  • 再次執行時 h(...args) 作為參數傳入 a,即最后返回的還是一個函數 (...args) => f(g(h(...args)))

因此最終版 applyMiddleware 實現中并非依次執行綁定,而是采用函數式的思維,將作用于 dispatch 的函數首先進行組合,再進行綁定。(所以要中間件要 curry 化)

// 傳入中間件函數的數組 function applyMiddleware(...middlewares) {// 返回一個函數的原因在 createStore 部分再進行介紹return (createStore) => (reducer, preloadedState, enhancer) => {const store = createStore(reducer, preloadedState, enhancer)let dispatch = store.dispatchlet chain = [] // 保存綁定了 middlewareAPI 后的函數數組const middlewareAPI = {getState: store.getState,dispatch: (action) => dispatch(action)}chain = middlewares.map(middleware => middleware(middlewareAPI))// 使用 compose 函數按照從右向左的順序綁定(執行順序是從左往右)dispatch = compose(...chain)(store.dispatch)return {...store,dispatch}} }// store -> { getState } 從傳遞整個 store 改為傳遞部分 api const logger = ({ getState }) => (next) => (action) => {console.log('dispatching', action);const result = next(action); // 應用原方法console.log('next state', getState());return result; };

綜上如下圖所示整個中間件的執行順序是類似于洋蔥一樣首先按照從外到內的順序執行 dispatch 之前的中間件代碼,在 dispatch(洋蔥的心)執行后又反過來,按照從內到左外的順序執行 dispatch 之后的中間件代碼。

橋都麻袋!

你真的都理解了么?

  • 在之前的實現中直接傳遞 store,為啥在最終實現中傳遞的是 middlewareAPI?
  • middlewareAPI 里的 dispatch 是為啥一個匿名函數而不直接傳遞 dispatch?
  • 如下列代碼所示,如果在中間件里不用 next 而是調用 store.dispatch 會怎樣呢?
const logger = (store) => (next) => (action) => {console.log('dispatching', action);// 調用原始 dispatch,而不是上一個中間件傳進來的const result = store.dispatch(action); // <- 這里console.log('next state', store.getState());return result; };

1.7. middleware 中調用 store.dispatch[[6]]

正常情況下,如圖左,當我們 dispatch 一個 action 時,middleware 通過 next(action) 一層一層處理和傳遞 action 直到 redux 原生的 dispatch。如果某個 middleware 使用 store.dispatch(action) 來分發 action,就發生了右圖的情況,相當于從外層重新來一遍,假如這個 middleware 一直簡單粗暴地調用 store.dispatch(action),就會形成無限循環了。(其實就相當于猴子補丁沒補上,不停地調用原來的函數)

因此最終版里不是直接傳遞 store,而是傳遞 getState 和 dispatch,傳遞 getState 的原因是可以通過 getState 獲取當前狀態。并且還將 dispatch 用一個匿名函數包裹 dispatch: (action) => dispatch(action),這樣不但可以防止 dispatch 被中間件修改,而且只要 dispatch 更新了,middlewareAPI 中的 dispatch 也會隨之發生變化。

1.8. createStore 進階

在上一篇中我們使用 createStore 方法只用到了它前兩個參數,即 reducer 和 preloadedState,然鵝其實它還擁有第三個參數 enhancer。

enhancer 參數可以實現中間件、時間旅行、持久化等功能,Redux 僅提供了 applyMiddleware 用于應用中間件(就是 1.6. 中的那個)。

在日常使用中,要應用中間件可以這么寫。

import {createStore,combineReducers,applyMiddleware, } from 'redux';// 組合 reducer const rootReducer = combineReducers({todos: todosReducer,filter: filterReducer, });// 中間件數組 const middlewares = [logger, anotherMiddleWare];const store = createStore(rootReducer,initialState,applyMiddleware(...middlewares), );// 如果不需要 initialState 的話也可以忽略 const store = createStore(rootReducer,applyMiddleware(...middlewares), );

在上文 applyMiddleware 的實現中留了個懸念,就是為什么返回的是一個函數,因為 enhancer 被定義為一個高階函數,接收 createStore 函數作為參數。

/*** 創建一個 redux store 用于保存狀態樹,* 唯一改變 store 中數據的方法就是對其調用 dispatch** 在你的應用中應該只有一個 store,想要針對不同的部分狀態響應 action,* 你應該使用 combineReducers 將多個 reducer 合并。** @param {函數} reducer 不多解釋了* @param {對象} preloadedState 主要用于前后端同構時的數據同步* @param {函數} enhancer 很牛逼,可以實現中間件、時間旅行,持久化等* ※ Redux 僅提供 applyMiddleware 這個 Store Enhancer ※* @return {Store}*/ export default function createStore(reducer, preloadedState, enhancer) {if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {enhancer = preloadedStatepreloadedState = undefined}if (typeof enhancer !== 'undefined') {if (typeof enhancer !== 'function') {throw new Error('Expected the enhancer to be a function.')}// enhancer 是一個高階函數,接收 createStore 函數作為參數return enhancer(createStore)(reducer, preloadedState)}// ...// 后續內容推薦看看參考資料部分的【Redux 莞式教程】 }

總的來說 Redux 有五個 API,分別是:

  • createStore(reducer, [initialState], enhancer)
  • combineReducers(reducers)
  • applyMiddleware(...middlewares)
  • bindActionCreators(actionCreators, dispatch)
  • compose(...functions)

createStore 生成的 store 有四個 API,分別是:

  • getState()
  • dispatch(action)
  • subscribe(listener)
  • replaceReducer(nextReducer)

以上 API 我們還沒介紹的應該就剩 bindActionCreators 了。這個 API 其實就是個語法糖起了方便地給 action creator 綁定 dispatch 的作用。

// 一般寫法 function mapDispatchToProps(dispatch) {return {onPlusClick: () => dispatch(increment()),onMinusClick: () => dispatch(decrement()),}; }// 使用 bindActionCreators import { bindActionCreators } from 'redux';function mapDispatchToProps(dispatch) {return bindActionCreators({onPlusClick: increment,onMinusClick: decrement,// 還可以綁定更多函數...}, dispatch); }// 甚至如果定義的函數輸入都相同的話還能更加簡潔 export default connect(mapStateToProps,// 直接傳一個對象,connect 自動幫你綁定 dispatch{ onPlusClick: increment, onMinusClick: decrement }, )(App);

二、異步操作

下面讓我們告別干凈的同步世界,進入“骯臟”的異步世界~。

在函數式編程中,異步操作、修改全局變量等與函數外部環境發生的交互叫做副作用(Side Effect)
通常認為這些操作是邪惡(evil)骯臟(dirty)的,并且也是導致 bug 的源頭。
因為與之相對的是純函數(pure function),即對于同樣的輸入總是返回同樣的輸出的函數,使用這樣的函數很容易做組合、測試等操作,很容易驗證和保證其正確性。(它們就像數學公式一般準確)

2.1. 通知應用場景[[3]]

現在有這么一個顯示通知的應用場景,在通知顯示后5秒鐘隱藏該通知。

首先當然是編寫 action

  • 顯示:SHOW_NOTIFICATION
  • 隱藏:HIDE_NOTIFICATION

2.1.1. 最直觀的寫法

最直觀的寫法就是首先顯示通知,然后使用 setTimeout 在5秒后隱藏通知。

store.dispatch({ type: 'SHOW_NOTIFICATION', text: 'You logged in.' }); setTimeout(() => {store.dispatch({ type: 'HIDE_NOTIFICATION' }); }, 5000);

然鵝,一般在組件中尤其是展示組件中沒法也沒必要獲取 store,因此一般將其包裝成 action creator。

// actions.js export function showNotification(text) {return { type: 'SHOW_NOTIFICATION', text }; } export function hideNotification() {return { type: 'HIDE_NOTIFICATION' }; }// component.js import { showNotification, hideNotification } from '../actions';this.props.dispatch(showNotification('You just logged in.')); setTimeout(() => {this.props.dispatch(hideNotification()); }, 5000);

或者更進一步地先使用 connect 方法包裝。

this.props.showNotification('You just logged in.'); setTimeout(() => {this.props.hideNotification(); }, 5000);

到目前為止,我們沒有用任何 middleware 或者別的概念。

2.1.2. 異步 action creator

上一種直觀寫法有一些問題

  • 每當我們需要顯示一個通知就需要手動先顯示,然后再手動地讓其消失。其實我們更希望通知到時間后自動地消失。
  • 通知目前沒有自己的 id,所以有些場景下存在競爭條件(race condition),即假如在第一個通知結束前觸發第二個通知,當第一個通知結束時,第二個通知也會被提前關閉。

所以為了解決以上問題,我們可以為通知加上 id,并將顯示和消失的代碼包起來。

// actions.js const showNotification = (text, id) => ({type: 'SHOW_NOTIFICATION',id,text, }); const hideNotification = (id) => ({type: 'HIDE_NOTIFICATION',id, });let nextNotificationId = 0; export function showNotificationWithTimeout(dispatch, text) {const id = nextNotificationId++;dispatch(showNotification(id, text));setTimeout(() => {dispatch(hideNotification(id));}, 5000); }// component.js showNotificationWithTimeout(this.props.dispatch, 'You just logged in.');// otherComponent.js showNotificationWithTimeout(this.props.dispatch, 'You just logged out.');

為啥 showNotificationWithTimeout 函數要接收 dispatch 作為第一個參數呢?
雖然通常一個組件都擁有觸發 dispatch 的權限,但是現在我們想讓一個外部函數(showNotificationWithTimeout)來觸發 dispatch,所以需要將 dispatch 作為參數傳入。

2.1.3. 單例 store

可能你會說如果有一個從其他模塊中導出的單例 store,那么是不是同樣也可以不傳遞 dispatch 以上代碼也可以這樣寫。

// store.js export default createStore(reducer);// actions.js import store from './store';// ...let nextNotificationId = 0; export function showNotificationWithTimeout(text) {const id = nextNotificationId++;store.dispatch(showNotification(id, text));setTimeout(() => {store.dispatch(hideNotification(id));}, 5000); }// component.js showNotificationWithTimeout('You just logged in.');// otherComponent.js showNotificationWithTimeout('You just logged out.');

這樣看起來似乎更簡單一些,不過墻裂不推薦這樣的寫法。主要的原因是這樣的寫法強制讓 store 成為一個單例。這樣一來要實現服務器端渲染(Server Rendering)將十分困難。因為在服務端,為了讓不同的用戶得到不同的預先獲取的數據,你需要讓每一個請求都有自己的 store。

并且單例 store 也將讓測試變得困難。當測試 action creator 時你將無法自己模擬一個 store,因為它們都引用了從外部導入的那個特定的 store,所以你甚至無法從外部重置狀態。

2.1.4. redux-thunk 中間件

首先聲明 redux-thunk 這種方案對于小型的應用來說足夠日常使用,然鵝對于大型應用來說,你可能會發現一些不方便的地方。(例如對于 action 需要組合、取消、競爭等復雜操作的場景)

首先來明確什么是 thunk...

A thunk is a function that wraps an expression to delay its evaluation.

簡單來說 thunk 就是封裝了表達式的函數,目的是延遲執行該表達式。不過有啥應用場景呢?

目前為止,在上文中的 2.1.2. 異步 action creator 部分,最后得出的方案有以下明顯的缺點

  • 我們必須將 dispatch 作為參數傳入。
  • 這樣一來任何使用了異步操作的組件都必須用 props 傳遞 dispatch(不管有多深...)。我們也沒法像之前各種同步操作一樣使用 connect 函數來綁定回調函數,因為 showNotificationWithTimeout 函數返回的不是一個 action。
  • 此外,在日常使用時,我們還需要區分哪些函數是同步的 action creator,那些是異步的 action creator。(異步的需要傳 dispatch...)

    • 同步的情況: store.dispatch(actionCreator(payload))
    • 異步的情況: asyncActionCreator(store.dispatch, payload)
計將安出?

其實問題的本質在于 Redux “有眼不識 function”,目前為止 dispatch 函數接收的參數只能是 action creator 返回的普通的 action。所以如果我們讓 dispatch 對于 function 網開一面,走走后門潛規則一下不就行啦~

實現方式很簡單,想想第一節介紹的為 dispatch 添加日志功能的過程。

// redux-thunk 源碼 function createThunkMiddleware(extraArgument) {return ({ dispatch, getState }) => next => action => {if (typeof action === 'function') {return action(dispatch, getState, extraArgument);}return next(action);}; }const thunk = createThunkMiddleware(); thunk.withExtraArgument = createThunkMiddleware;export default thunk;

以上就是 redux-thunk 的源碼,就是這么簡單,判斷下如果傳入的 action 是函數的話,就執行這個函數...(withExtraArgument 是為了添加額外的參數,詳情見 redux-thunk 的 README.md)

  • 這樣一來如果我們 dispatch 了一個函數,redux-thunk 會傳給它一個 dispatch 參數,我們就利用 thunk 解決了組件中不方便獲取 dispatch 的問題。
  • 并且由于 redux-thunk 攔截了函數,也可以防止 reducer 接收到函數而出現異常。

添加了 redux-thunk 中間件后代碼可以這么寫。

// actions.js // ...let nextNotificationId = 0; export function showNotificationWithTimeout(text) {// 返回一個函數return function(dispatch) {const id = nextNotificationId++;dispatch(showNotification(id, text));setTimeout(() => {dispatch(hideNotification(id));}, 5000);}; }// component.js 像同步函數一樣的寫法 this.props.dispatch(showNotificationWithTimeout('You just logged in.'));// 或者 connect 后直接調用 this.props.showNotificationWithTimeout('You just logged in.');

2.2. 接口應用場景

目前我們對于簡單的延時異步操作的處理已經了然于胸了,現在讓我們來考慮一下通過 ajax 或 jsonp 等接口來獲取數據的異步場景。

很自然的,我們會發起一個請求,然后等待請求的響應(請求可能成功或是失敗)。

即有基本的三種狀態和與之對應的 action:

  • 請求開始的 action:isFetching 為真,UI 顯示加載界面

{ type: 'FETCH_POSTS_REQUEST' }

  • 請求成功的 action:isFetching 為假,隱藏加載界面并顯示接收到的數據

{ type: 'FETCH_POSTS_SUCCESS', response: { ... } }

  • 請求失敗的 action:isFetching 為假,隱藏加載界面,可能保存失敗信息并在 UI 中顯示出來

{ type: 'FETCH_POSTS_FAILURE', error: 'Oops' }

按照這個思路,舉一個簡單的栗子。

// Constants const FETCH_POSTS_REQUEST = 'FETCH_POSTS_REQUEST'; const FETCH_POSTS_SUCCESS = 'FETCH_POSTS_SUCCESS'; const FETCH_POSTS_FAILURE = 'FETCH_POSTS_FAILURE';// Actions const requestPosts = (id) => ({type: FETCH_POSTS_REQUEST,payload: id, });const receivePosts = (res) => ({type: FETCH_POSTS_SUCCESS,payload: res, });const catchPosts = (err) => ({type: FETCH_POSTS_FAILURE,payload: err, });const fetchPosts = (id) => (dispatch, getState) => {dispatch(requestPosts(id));return api.getData(id).then(res => dispatch(receivePosts(res))).catch(error => dispatch(catchPosts(error))); };// reducer const reducer = (oldState, action) => {switch (action.type) {case FETCH_POSTS_REQUEST:return requestState;case FETCH_POSTS_SUCCESS:return successState;case FETCH_POSTS_FAILURE:return errorState;default:return oldState;} };

盡管這已經是最簡單的調用接口場景,我們甚至還沒寫一行業務邏輯代碼,但講道理的話代碼還是比較繁瑣的。

而且其實代碼是有一定的“套路”的,比如其實整個代碼都是針對請求、成功、失敗三部分來處理的,這讓我們自然聯想到 Promise,同樣也是分為 pending、fulfilled、rejected 三種狀態。

那么這兩者可以結合起來讓模版代碼精簡一下么?

2.2.1. redux-promise 中間件[[8]]

首先開門見山地使用 redux-promise 中間件來改寫之前的代碼看看效果。

// Constants const FETCH_POSTS_REQUEST = 'FETCH_POSTS_REQUEST';// Actions const fetchPosts = (id) => ({type: FETCH_POSTS_REQUEST,payload: api.getData(id), // payload 為 Promise 對象 });// reducer const reducer = (oldState, action) => {switch (action.type) {case FETCH_POSTS_REQUEST:// requestState 被“吃掉”了// 而成功、失敗的狀態通過 status 來判斷if (action.status === 'success') {return successState;} else {return errorState;}default:return oldState;} };

可以看出 redux-promise 中間件比較激進、比較原教旨。

不但將發起請求的初始狀態被攔截了(原因見下文源碼),而且使用 action.status 而不是 action.type 來區分兩個 action 這一做法也值得商榷(個人傾向使用 action.type 來判斷)。

// redux-promise 源碼 import { isFSA } from 'flux-standard-action';function isPromise(val) {return val && typeof val.then === 'function'; }export default function promiseMiddleware({ dispatch }) {return next => action => {if (!isFSA(action)) {return isPromise(action)? action.then(dispatch): next(action);}return isPromise(action.payload)// 直接調用 Promise.then(所以發不出請求開始的 action)? action.payload.then(// 自動 dispatchresult => dispatch({ ...action, payload: result }),// 自動 dispatcherror => {dispatch({ ...action, payload: error, error: true });return Promise.reject(error);}): next(action);}; }

以上是 redux-promise 的源碼,十分簡單。主要邏輯是判斷如果是 Promise 就執行 then 方法。此外還根據是不是 FSA 決定調用的是 action 本身還是 action.payload 并且對于 FSA 會自動 dispatch 成功和失敗的 FSA。

2.2.2. redux-promise-middleware 中間件

盡管 redux-promise 中間件節省了大量代碼,然鵝它的缺點除了攔截請求開始的 action,以及使用 action.status 來判斷成功失敗狀態以外,還有就是由此引申出的一個無法實現的場景————樂觀更新(Optimistic Update)。

樂觀更新比較直觀的栗子就是在微信、QQ等通訊軟件中,發送的消息立即在對話窗口中展示,如果發送失敗了,在消息旁邊展示提示即可。由于在這種交互方式中“樂觀”地相信操作會成功,因此稱作樂觀更新。

因為樂觀更新發生在用戶發起操作時,所以要實現它,意味著必須有表示用戶初始動作的 action。

因此為了解決這些問題,相對于比較原教旨的 redux-promise 來說,更加溫和派一點的 redux-promise-middleware 中間件應運而生。先看看代碼怎么說。

// Constants const FETCH_POSTS = 'FETCH_POSTS'; // 前綴// Actions const fetchPosts = (id) => ({type: FETCH_POSTS, // 傳遞的是前綴,中間件會自動生成中間狀態payload: {promise: api.getData(id),data: id,}, });// reducer const reducer = (oldState, action) => {switch (action.type) {case `${FETCH_POSTS}_PENDING`:return requestState; // 可通過 action.payload.data 獲取 idcase `${FETCH_POSTS}_FULFILLED`:return successState;case `${FETCH_POSTS}_REJECTED`:return errorState;default:return oldState;} };

如果不需要樂觀更新,fetchPosts 函數可以更加簡潔。

// 此時初始 actionGET_DATA_PENDING 仍然會觸發,但是 payload 為空。 const fetchPosts = (id) => ({type: FETCH_POSTS, // 傳遞的是前綴payload: api.getData(id), // 等價于 payload: { promise: api.getData(id) }, });

相對于 redux-promise 簡單粗暴地直接過濾初始 action,從 reducer 可以看出,redux-promise-middleware 會首先自動觸發一個 FETCH_POSTS_PENDING 的 action,以此保留樂觀更新的能力。

并且,在狀態的區分上,回歸了通過 action.type 來判斷狀態的“正途”,其中 _PENDING、_FULFILLED、_REJECTED 后綴借用了 Promise 規范 (當然它們是可配置的) 。

后綴可以配置全局或局部生效,例如全局配置可以這么寫。 applyMiddleware(promiseMiddleware({promiseTypeSuffixes: ['LOADING', 'SUCCESS', 'ERROR']}) )

源碼地址點我,類似 redux-promise 也是在中間件中攔截了 payload 中有 Promise 的 action,并主動 dispatch 三種狀態的 action,注釋也很詳細在此就不贅述了。

注意:redux-promise、redux-promise-middleware 與 redux-thunk 之間并不是互相替代的關系,而更像一種補充優化。

2.3. redux-loop 中間件

簡單小結一下,Redux 的數據流如下所示:

UI => action => action creator => reducer => store => react => v-dom => UI

redux-thunk 的思路是保持 action 和 reducer 簡單純粹,然鵝副作用操作(在前端主要體現在異步操作上)的復雜度是不可避免的,因此它將其放在了 action creator 步驟,通過 thunk 函數手動控制每一次的 dispatch。

redux-promise 和 redux-promise-middleware 只是在其基礎上做一些輔助性的增強,處理異步的邏輯本質上是相同的,即將維護復雜異步操作的責任推到了用戶的身上。

這種實現方式固然很好理解,而且理論上可以應付所有異步場景,但是由此帶來的問題就是模版代碼太多,一旦流程復雜那么異步代碼就會到處都是,很容易導致出現 bug。

因此有一些其他的中間件,例如 redux-loop 就將異步處理邏輯放在 reducer 中。(Redux 的思想借鑒了 Elm,注意并不是“餓了么”,而 Elm 就是將異步處理放在 update(reducer) 層中)。

Synchronous state transitions caused by returning a new state from the reducer in response to an action are just one of all possible effects an action can have on application state.
這種通過響應一個 action,在 reducer 中返回一個新 state,從而引起同步狀態轉換的方式,只是在應用狀態中一個 action 能擁有的所有可能影響的一種。(可能沒翻好~歡迎勘誤~)

redux-loop 認為許多其他的處理異步的中間件,尤其是通過 action creator 方式實現的中間件,錯誤地讓用戶認為異步操作從根本上與同步操作并不相同。這樣一來無形中鼓勵了中間件以許多特殊的方式來處理異步狀態。

與之相反,redux-loop 專注于讓 reducer 變得足夠強大以便處理同步和異步操作。在具體實現上 reducer 不僅能夠根據特定的 action 決定當前的轉換狀態,而且還能決定接著發生的操作。

應用中所有行為都可以在一個地方(reducer)中被追蹤,并且這些行為可以輕易地分割和組合。(redux 作者 Dan 開了個至今依然 open 的 issue:Reducer Composition with Effects in JavaScript,討論關于對 reducer 進行分割組合的問題。)

redux-loop 模仿 Elm 的模式,引入了 Effect 的概念,在 reducer 中對于異步等操作使用 Effect 來處理。如下官方示例所示:

import { Effects, loop } from 'redux-loop';function fetchData(id) {return fetch(`endpoint/${id}`).then((r) => r.json()).then((data) => ({ type: 'FETCH_SUCCESS', payload: data })).catch((error) => ({ type: 'FETCH_FAILURE', payload: error.message })); }function reducer(state, action) {switch(action.type) {case 'FETCH_START':return loop( // <- 并沒有直接返回 state,實際上了返回數組 [state, effect]{ ...state, loading: true },Effects.promise(fetchData, action.payload.id));case 'FETCH_SUCCESS':return { ...state, loading: false, data: action.payload };case 'FETCH_FAILURE':return { ...state, loading: false, errorMessage: action.payload };} }

雖然這個想法很 Elm 很函數式,不過由于修改了 reducer 的返回類型,這樣一來會導致許多已有的 Api 和第三方庫無法使用,甚至連 redux 庫中的 combineReducers 方法都需要使用 redux-loop 提供的定制版本。因此這也是 redux-loop 最終無法轉正的原因:

"If a solution doesn’t work with vanilla combineReducers(), it won’t get into Redux core."

三、復雜異步操作

3.1. 更復雜的通知場景[[9]]

讓我們的思路重新回到通知的場景,之前的代碼實現了:

  • 展示一個通知并在數秒后消失
  • 可以同時展示多個通知。

現在假設可親可愛的產品又提出了新需求:

  • 同時不展示多于3個的通知
  • 如果已有3個通知正在展示,此時的新通知請求將排隊延遲展示。
“這個實現不了...”(全文完)

這個當然可以實現,只不過如果只用之前的 redux-thunk 實現起來會很麻煩。例如可以在 store 中增加兩個數組分別表示當前展示列表和等待隊列,然后在 reducer 中手動控制各個狀態時這倆數組的變化。

3.2. redux-saga 中間件

首先來看看使用了 redux-saga 后代碼會變成怎樣~(代碼來自生產環境的某 app)

function* toastSaga() {const MaxToasts = 3;const ToastDisplayTime = 4000;let pendingToasts = []; // 等待隊列let activeToasts = []; // 展示列表function* displayToast(toast) {if ( activeToasts >= MaxToasts ) {throw new Error("can't display more than " + MaxToasts + " at the same time");}activeToasts = [...activeToasts, toast]; // 新增通知到展示列表yield put(events.toastDisplayed(toast)); // 展示通知yield call(delay, ToastDisplayTime); // 通知的展示時間yield put(events.toastHidden(toast)); // 隱藏通知activeToasts = _.without(activeToasts,toast); // 從展示列表中刪除}function* toastRequestsWatcher() {while (true) {const event = yield take(Names.TOAST_DISPLAY_REQUESTED); // 監聽通知展示請求const newToast = event.data.toastData;pendingToasts = [...pendingToasts, newToast]; // 將新通知放入等待隊列}}function* toastScheduler() {while (true) {if (activeToasts.length < MaxToasts && pendingToasts.length > 0) {const [firstToast,...remainingToasts] = pendingToasts;pendingToasts = remainingToasts;yield fork(displayToast, firstToast); // 取出隊頭的通知進行展示// 增加一點延遲,這樣一來兩個并發的通知請求不會同時展示yield call(delay, 300);}else {yield call(delay, 50);}}}yield [call(toastRequestsWatcher),call(toastScheduler)] }// reducer const reducer = (state = {toasts: []}, event) => {switch (event.name) {case Names.TOAST_DISPLAYED:return {...state,toasts: [...state.toasts, event.data.toastData]};case Names.TOAST_HIDDEN:return {...state,toasts: _.without(state.toasts, event.data.toastData)};default:return state;} };

先不要在意代碼的細節,簡單分析一下上述代碼的邏輯:

  • store 上只有一個 toasts 節點,且 reducer 十分干凈
  • 排隊等具體的業務邏輯都放到了 toastSaga 函數中

    • displayToast 函數負責單個通知的展示和消失邏輯
    • toastRequestsWatcher 函數負責監聽請求,將其加入等待隊列
    • toastScheduler 函數負責將等待隊列中的元素加入展示列表

基于這樣邏輯分離的寫法,還可以繼續滿足更加復雜的需求:

  • 如果在等待隊列中有太多通知,動態減少通知的展示時間
  • 根據窗口大小的變化,改變最多展示的通知數量
  • ...

redux-saga V.S. redux-thunk[[11]]
redux-saga 的優點:

  • 易于測試,因為 redux-saga 中所有操作都 yield 簡單對象,所以測試只要判斷返回的對象是否正確即可,而測試 thunk 通常需要你在測試中引入一個 mockStore
  • redux-saga 提供了一些方便的輔助方法。(takeLatest、cancel、race 等)
  • 在 saga 函數中處理業務邏輯和異步操作,這樣一來通常代碼更加清晰,更容易增加和更改功能
  • 使用 ES6 的 generator,以同步的方式寫異步代碼

redux-saga 的缺點:

  • generator 的語法("又是 * 又是 yield 的,很難理解誒~")
  • 學習曲線陡峭,有許多概念需要學習("fork、join 這不是進程的概念么?這些 yield 是以什么順序執行的?")
  • API 的穩定性,例如新增了 channel 特性,并且社區也不是很大。
通知場景各種中間件寫法的完整代碼可以看這里

3.3. 理解 Saga Pattern[[14]]

3.3.1. Saga 是什么

Sagas 的概念來源于這篇論文,該論文從數據庫的角度談了 Saga Pattern。

Saga 就是能夠滿足特定條件的長事務(Long Lived Transaction)

暫且不提這個特定條件是什么,首先一般學過數據庫的都知道事務(Transaction)是啥~

如果不知道的話可以用轉賬來理解,A 轉給 B 100 塊錢的操作需要保證完成 A 先減 100 塊錢然后 B 加 100 塊錢這兩個操作,這樣才能保證轉賬前后 A 和 B 的存款總額不變。
如果在給 B 加 100 塊錢的過程中發生了異常,那么就要返回轉賬前的狀態,即給 A 再加上之前減的 100 塊錢(不然錢就不翼而飛了),這樣的一次轉賬(要么轉成功,要么失敗返回轉賬前的狀態)就是一個事務。

3.3.2. 長事務的問題

長事務顧名思義就是一個長時間的事務。

一般來說是通過給正在進行事務操作的對象加鎖,來保證事務并發時不會出錯。

例如 A 和 B 都給 C 轉 100 塊錢。

  • 如果不加鎖,極端情況下 A 先轉給 C 100 塊,而 B 讀取到了 C 轉賬前的數值,這時 B 的轉賬會覆蓋 A 的轉賬,C 只加了 100 塊錢,另 100 塊不翼而飛了。
  • 如果加了鎖,這時 B 的轉賬會等待 A 的轉賬完成后再進行。所以 C 能正確地收到 200 塊錢。
以押尾光太郎的指彈演奏會售票舉例,在一個售票的時間段后,最終舉辦方需要確定售票數量,這就是一個長事務。

然鵝,對于長事務來說總不能一直鎖住對應數據吧?

為了解決這個問題,假設一個長事務:T,

可以被拆分成許多相互獨立的子事務(subtransaction):t_1 ~ t_n。

以上述押尾桑的表演為例,每個 t 就是一筆售票記錄。

假如每次購票都一次成功,且沒有退票的話,整個流程就如下圖一般被正常地執行。

那假如有某次購票失敗了怎么辦?

3.3.3. Saga 的特殊條件

A LLT is a saga if it can be written as a sequence of transactions that can be interleaved with other transactions.
Saga 就是能夠被寫成事務的序列,并且能夠在執行過程中被其他事務插入執行的長事務。

Saga 通過引入補償事務(Compensating Transaction)的概念,解決事務失敗的問題。

即任何一個 saga 中的子事務 t_i,都有一個補償事務 c_i 負責將其撤銷(undo)。

注意是撤銷該子事務,而不是回到子事務發生前的時間點。

根據以上邏輯,可以推出很簡單的公式:

  • Saga 如果全部執行成功那么子事務序列看起來像這樣:t_1, t_2, t_3, ..., t_n

  • Saga 如果執行全部失敗那么子事務序列看起來像這樣:t_1, t_2, t_3, ..., t_n, c_n, ..., c_1

注意到圖中的 c_4 其實并沒有必要,不過因為每次撤銷執行都應該是冪等(Idempotent)的,所以也不會出錯。

篇幅有限在此就不繼續深入介紹...

  • 推薦看看從分布式系統方面講 Saga Pattern 的視頻:GOTO 2015 ? Applying the Saga Pattern ? Caitie McCaffrey
  • MSDN 的文章:A Saga on Sagas

3.4. 響應式編程(Reactive Programming)[[15]]

redux-saga 中間件基于 Sagas 的理論,通過監聽 action,生成對應的各種子 saga(子事務)解決了復雜異步問題。

而接下來要介紹的 redux-observable 中間件背后的理論是響應式編程(Reactive Programming)。

In computing, reactive programming is a programming paradigm oriented around data flows and the propagation of change.

簡單來說,響應式編程是針對異步數據流的編程并且認為:萬物皆流(Everything is Stream)。

流(Stream)就是隨著時間的流逝而發生的一系列事件。

例如點擊事件的示意圖就是這樣。

用字符表示【上上下下左右左右BABA】可以像這樣。(注意順序是從左往右)

--上----上-下---下----左---右-B--A-B--A---X-|->上, 下, 左, 右, B, A 是數據流發射的值 X 是數據流發射的錯誤 | 是完成信號 ---> 是時間線

那么我們要根據一個點擊流來計算點擊次數的話可以這樣。(一般響應式編程庫都會提供許多輔助方法如 map、filter、scan 等)

clickStream: ---c----c--c----c------c-->map(c becomes 1)---1----1--1----1------1-->scan(+) counterStream: ---1----2--3----4------5-->

如上所示,原始的 clickStream 經過 map 后產生了一個新的流(注意原始流不變),再對該流進行 scan(+) 的操作就生成了最終的 counterStream。

再來個栗子~,假設我們需要從點擊流中得到關于雙擊的流(250ms 以內),并且對于大于兩次的點擊也認為是雙擊。先想一想應該怎么用傳統的命令式、狀態式的方式來寫,然后再想想用流的思考方式又會是怎么樣的~。

這里我們用了以下輔助方法:

  • 節流:throttle(250ms),將原始流在 250ms 內的所有數據當作一次事件發射
  • 緩沖(不造翻譯成啥比較好):buffer,將 250ms 內收集的數據放入一個數據包裹中,然后發射這些包裹
  • 映射:map,這個不解釋
  • 過濾:filter,這個也不解釋

更多內容請繼續學習 RxJS。

3.5. redux-observable 中間件[[16]]

redux-observable 就是一個使用 RxJS 監聽每個 action 并將其變成可觀測流(observable stream)的中間件。

其中最核心的概念叫做 epic,就是一個監聽流上 action 的函數,這個函數在接收 action 并進行一些操作后可以再返回新的 action。

At the highest level, epics are “actions in, actions out”

redux-observable 通過在后臺執行 .subscribe(store.dispatch) 實現監聽。

Epic 像 Saga 一樣也是 Long Lived,即在應用初始化時啟動,持續運行到應用關閉。雖然 redux-observable 是一個中間件,但是類似于 redux-saga,可以想象它就像新開的進/線程,監聽著 action。

在這個運行流程中,epic 不像 thunk 一樣攔截 action,或阻止、改變任何原本 redux 的生命周期的其他東西。這意味著每個 dispatch 的 action 總會經過 reducer 處理,實際上在 epic 監聽到 action 前,action 已經被 reducer 處理過了。

所以 epic 的功能就是監聽所有的 action,過濾出需要被監聽的部分,對其執行一些帶副作用的異步操作,然后根據你的需要可以再發射一些新的 action。

舉個自動保存的栗子,界面上有一個輸入框,每次用戶輸入了數據后,去抖動后進行自動保存,并在向服務器發送請求的過程中顯示正在保存的 UI,最后顯示成功或失敗的 UI。

使用 redux-observable 中間件編寫代碼,可以僅用十幾行關鍵代碼就實現上述功能。

import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/dom/ajax'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/mergeMap'; import 'rxjs/add/operator/startWith';import {isSaving, savingSuccess, savingError, } from '../actions/autosave-actions.js';const saveField = (action$) => // 一般在變量后面加 $ 表示是個 streamaction$.ofType('SAVE_FIELD') // 使用 ofType 監聽 'SAVE_FIELD' action.debounceTime(500) // 防抖動// 即 map + mergeAll 因為異步導致 map 后有多個流需要 merge.mergeMap(({ payload }) =>Observable.ajax({ // 發起請求method: 'PATCH',url: payload.url,body: JSON.stringify(payload),}).map(res => savingSuccess(res)) // 發出成功的 action.catch(err => Observable.of(savingError(err))) // 捕捉錯誤并發出 action.startWith(isSaving()) // 發出請求開始的 action);export default saveField;

篇幅有限在此就不繼續深入介紹...

  • 關于 redux-observable 的前世今生推薦看看 Netfix 工程師的這個視頻:Netflix JavaScript Talks - RxJS + Redux + React = Amazing!
  • 如果覺得看視頻聽英語麻煩的話知乎有人翻譯了...

    • RxJS + Redux + React = Amazing!(譯一)
    • RxJS + Redux + React = Amazing!(譯二)

四、總結

本文從為 Redux 應用添加日志功能(記錄每一次的 dispatch)入手,引出 redux 的中間件(middleware)的概念和實現方法。

接著從最簡單的 setTimeout 的異步操作開始,通過對比各種實現方法引出 redux 最基礎的異步中間件 redux-thunk。

針對 redux-thunk 使用時模版代碼過多的問題,又介紹了用于優化的 redux-promise 和 redux-promise-middleware 兩款中間件。

由于本質上以上中間件都是基于 thunk 的機制來解決異步問題,所以不可避免地將維護異步狀態的責任推給了開發者,并且也因為難以測試的原因。在復雜的異步場景下使用起來難免力不從心,容易出現 bug。

所以還簡單介紹了一下將處理副作用的步驟放到 reducer 中并通過 Effect 進行解決的 redux-loop 中間件。然鵝因為其無法使用官方 combineReducers 的原因而無法被納入 redux 核心代碼中。

此外社區根據 Saga 的概念,利用 ES6 的 generator 實現了 redux-saga 中間件。雖然通過 saga 函數將業務代碼分離,并且可以用同步的方式流程清晰地編寫異步代碼,但是較多的新概念和 generator 的語法可能讓部分開發者望而卻步。

同樣是基于觀察者模式,通過監聽 action 來處理異步操作的 redux-observable 中間件,背后的思想是響應式編程(Reactive Programming)。類似于 saga,該中間件提出了 epic 的概念來處理副作用。即監聽 action 流,一旦監聽到目標 action,就處理相關副作用,并且還可以在處理后再發射新的 action,繼續進行處理。盡管在處理異步流程時同樣十分方便,但對于開發者的要求同樣很高,需要開發者學習關于函數式的相關理論。

五、參考資料

  • Redux 英文原版文檔
  • Redux 中文文檔
  • Dan Abramov - how to dispatch a redux action with a timeout
  • 阮一峰 - Redux 入門教程(二):中間件與異步操作
  • Redux 莞式教程
  • redux middleware 詳解
  • Thunk 函數的含義和用法
  • Redux異步方案選型
  • Sebastien Lorber - how to dispatch a redux action with a timeout
  • Sagas 論文
  • Pros/cons of using redux-saga with ES6 generators vs redux-thunk with ES7 async/await
  • Redux-saga 英文文檔
  • Redux-saga 中文文檔
  • Saga Pattern 在前端的應用
  • The introduction to Reactive Programming you've been missing
  • Epic Middleware in Redux
  • 以上 to be continued...

    總結

    以上是生活随笔為你收集整理的Redux 进阶 - react 全家桶学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产成人无码专区 | 久久亚洲日韩精品一区二区三区 | 四虎影视成人永久免费观看视频 | 国产av无码专区亚洲a∨毛片 | 2020最新国产自产精品 | 成人一区二区免费视频 | 东京热男人av天堂 | 国产成人精品无码播放 | 3d动漫精品啪啪一区二区中 | 免费无码av一区二区 | 亚洲a无码综合a国产av中文 | 亚洲无人区一区二区三区 | 天下第一社区视频www日本 | 亚洲国精产品一二二线 | 国产精品久久久 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲自偷自偷在线制服 | 久久精品视频在线看15 | 国产亚洲人成在线播放 | 久久久婷婷五月亚洲97号色 | 蜜臀aⅴ国产精品久久久国产老师 | 午夜时刻免费入口 | 久久亚洲日韩精品一区二区三区 | 又紧又大又爽精品一区二区 | 国产激情精品一区二区三区 | 狠狠色欧美亚洲狠狠色www | 精品国产一区av天美传媒 | 无码精品人妻一区二区三区av | 亚洲精品中文字幕久久久久 | 99久久久国产精品无码免费 | 少妇人妻大乳在线视频 | 色五月丁香五月综合五月 | 性做久久久久久久久 | 乱人伦中文视频在线观看 | v一区无码内射国产 | 亚洲高清偷拍一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 欧美激情一区二区三区成人 | 四十如虎的丰满熟妇啪啪 | 亚洲色在线无码国产精品不卡 | v一区无码内射国产 | 亚洲 a v无 码免 费 成 人 a v | 无码帝国www无码专区色综合 | 精品国产精品久久一区免费式 | 少妇无码吹潮 | 日本丰满熟妇videos | 丰满人妻被黑人猛烈进入 | 女人被男人爽到呻吟的视频 | 又黄又爽又色的视频 | 国产偷抇久久精品a片69 | 国产农村乱对白刺激视频 | 欧美喷潮久久久xxxxx | 99久久久国产精品无码免费 | 久久久精品欧美一区二区免费 | 天堂久久天堂av色综合 | 精品国产精品久久一区免费式 | 国产成人无码区免费内射一片色欲 | 综合人妻久久一区二区精品 | 日本一本二本三区免费 | 熟女体下毛毛黑森林 | 国产精品福利视频导航 | 国产成人无码午夜视频在线观看 | 宝宝好涨水快流出来免费视频 | 亚洲熟妇色xxxxx亚洲 | 亚洲日本一区二区三区在线 | 婷婷色婷婷开心五月四房播播 | 国产免费久久久久久无码 | 国产特级毛片aaaaaa高潮流水 | 久精品国产欧美亚洲色aⅴ大片 | 麻豆成人精品国产免费 | 久久久久久久人妻无码中文字幕爆 | 三级4级全黄60分钟 | 精品久久8x国产免费观看 | 国内少妇偷人精品视频免费 | 亚洲一区二区三区无码久久 | 婷婷丁香五月天综合东京热 | 国产在线精品一区二区高清不卡 | 欧美自拍另类欧美综合图片区 | 国产明星裸体无码xxxx视频 | 伊人久久大香线蕉亚洲 | 亚洲中文字幕在线无码一区二区 | 人妻体内射精一区二区三四 | 亚洲精品中文字幕乱码 | 婷婷丁香五月天综合东京热 | 亚洲精品午夜国产va久久成人 | 色窝窝无码一区二区三区色欲 | 久在线观看福利视频 | 一区二区传媒有限公司 | 国产亚洲欧美在线专区 | 久青草影院在线观看国产 | 免费无码午夜福利片69 | 鲁一鲁av2019在线 | 久久久精品人妻久久影视 | 亚洲成a人片在线观看无码3d | 亚洲欧美国产精品久久 | 性欧美videos高清精品 | 精品国产一区二区三区四区在线看 | 亚洲国产精品久久人人爱 | 国产成人精品久久亚洲高清不卡 | 亚洲一区二区观看播放 | 色欲av亚洲一区无码少妇 | 婷婷色婷婷开心五月四房播播 | 日本精品高清一区二区 | 激情国产av做激情国产爱 | aⅴ亚洲 日韩 色 图网站 播放 | 99久久人妻精品免费二区 | 日产精品99久久久久久 | 人人妻人人澡人人爽欧美一区 | 熟女俱乐部五十路六十路av | 领导边摸边吃奶边做爽在线观看 | 狂野欧美性猛交免费视频 | 国产精品毛片一区二区 | 亚洲国产精品成人久久蜜臀 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲综合无码一区二区三区 | 日本一区二区三区免费播放 | 99精品无人区乱码1区2区3区 | 欧美人与善在线com | 亚洲午夜久久久影院 | 色综合久久久无码网中文 | 日本欧美一区二区三区乱码 | 成人无码精品一区二区三区 | 日韩精品久久久肉伦网站 | 国产在线精品一区二区高清不卡 | 欧美老人巨大xxxx做受 | 97夜夜澡人人爽人人喊中国片 | 亚洲精品无码人妻无码 | 中文字幕日产无线码一区 | 中文字幕人成乱码熟女app | 久久久中文久久久无码 | 丝袜人妻一区二区三区 | 国产午夜视频在线观看 | 亚洲小说图区综合在线 | 97精品人妻一区二区三区香蕉 | 国产成人亚洲综合无码 | 久久国产精品偷任你爽任你 | 国产成人综合色在线观看网站 | 久在线观看福利视频 | 熟妇人妻无码xxx视频 | 精品国精品国产自在久国产87 | 99久久99久久免费精品蜜桃 | 午夜精品久久久久久久 | 夫妻免费无码v看片 | 天堂无码人妻精品一区二区三区 | av无码不卡在线观看免费 | 亚洲国产午夜精品理论片 | 欧美人与禽猛交狂配 | 国产无套内射久久久国产 | 性生交大片免费看l | 精品日本一区二区三区在线观看 | 欧美人与禽zoz0性伦交 | 我要看www免费看插插视频 | 日本熟妇人妻xxxxx人hd | 久久99久久99精品中文字幕 | 精品无码国产一区二区三区av | 亚洲aⅴ无码成人网站国产app | 性欧美牲交在线视频 | 人妻少妇被猛烈进入中文字幕 | 女高中生第一次破苞av | 4hu四虎永久在线观看 | 欧美三级不卡在线观看 | 国产精品国产三级国产专播 | 亚洲国产精品久久人人爱 | 人妻互换免费中文字幕 | 欧美35页视频在线观看 | 亚洲一区二区三区含羞草 | 亚洲国产欧美在线成人 | 88国产精品欧美一区二区三区 | 亚洲国产精品一区二区第一页 | 成人免费视频视频在线观看 免费 | 色婷婷av一区二区三区之红樱桃 | 免费观看激色视频网站 | 好男人www社区 | 国产激情艳情在线看视频 | 日韩精品乱码av一区二区 | 久久久久se色偷偷亚洲精品av | 色五月丁香五月综合五月 | 中文字幕av无码一区二区三区电影 | 国产性生大片免费观看性 | 亚洲精品一区二区三区在线观看 | 亚洲精品国产第一综合99久久 | 国产97色在线 | 免 | 国产九九九九九九九a片 | 国产激情艳情在线看视频 | 伊人久久大香线焦av综合影院 | 欧美日韩视频无码一区二区三 | 精品人人妻人人澡人人爽人人 | 啦啦啦www在线观看免费视频 | 波多野结衣一区二区三区av免费 | 丁香花在线影院观看在线播放 | 国产精品永久免费视频 | 久久zyz资源站无码中文动漫 | 人妻人人添人妻人人爱 | 久久国产精品精品国产色婷婷 | 精品国偷自产在线视频 | 中文字幕av日韩精品一区二区 | 免费国产成人高清在线观看网站 | 特黄特色大片免费播放器图片 | 无码人妻精品一区二区三区下载 | 黑人巨大精品欧美黑寡妇 | 国产亚洲精品久久久久久 | 日本精品高清一区二区 | 熟妇人妻中文av无码 | 欧美成人家庭影院 | 亚洲欧洲日本综合aⅴ在线 | 任你躁国产自任一区二区三区 | 老熟女重囗味hdxx69 | 国产suv精品一区二区五 | 国产精品手机免费 | 亚洲成av人片天堂网无码】 | 99久久亚洲精品无码毛片 | 国产精品对白交换视频 | 欧美 日韩 人妻 高清 中文 | 久久久精品人妻久久影视 | 亚洲欧洲无卡二区视頻 | 久久zyz资源站无码中文动漫 | 99久久久无码国产精品免费 | 国产精品-区区久久久狼 | 天堂在线观看www | 麻豆国产人妻欲求不满谁演的 | 欧美日韩视频无码一区二区三 | 四十如虎的丰满熟妇啪啪 | 99精品久久毛片a片 | 一区二区三区高清视频一 | 55夜色66夜色国产精品视频 | 精品久久久久久亚洲精品 | 国产熟妇高潮叫床视频播放 | 女人高潮内射99精品 | 久久99热只有频精品8 | 日本va欧美va欧美va精品 | 清纯唯美经典一区二区 | 最近免费中文字幕中文高清百度 | 精品欧美一区二区三区久久久 | 熟妇激情内射com | 国产成人无码av一区二区 | 精品无人区无码乱码毛片国产 | 国产9 9在线 | 中文 | 国产真实乱对白精彩久久 | 丰满少妇高潮惨叫视频 | 国产极品美女高潮无套在线观看 | 久久精品中文闷骚内射 | 亚洲国产精华液网站w | 高潮毛片无遮挡高清免费 | 中文字幕久久久久人妻 | 国产精品毛片一区二区 | 亚洲精品一区二区三区四区五区 | 少妇无码av无码专区在线观看 | 色综合久久久无码网中文 | ass日本丰满熟妇pics | 婷婷综合久久中文字幕蜜桃三电影 | 精品aⅴ一区二区三区 | 丰满少妇女裸体bbw | 国产办公室秘书无码精品99 | 久久无码中文字幕免费影院蜜桃 | 日本丰满熟妇videos | 亚洲毛片av日韩av无码 | 国语精品一区二区三区 | 中文无码精品a∨在线观看不卡 | 性生交片免费无码看人 | 伊人久久大香线蕉av一区二区 | 亚洲综合伊人久久大杳蕉 | 亚洲七七久久桃花影院 | 成人试看120秒体验区 | 国产午夜福利100集发布 | 夫妻免费无码v看片 | 麻豆成人精品国产免费 | 丰满护士巨好爽好大乳 | 无码福利日韩神码福利片 | 东京热一精品无码av | 亚洲国产日韩a在线播放 | 欧洲精品码一区二区三区免费看 | 青青久在线视频免费观看 | 激情内射日本一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产女主播喷水视频在线观看 | 兔费看少妇性l交大片免费 | 国产精品福利视频导航 | 国产麻豆精品一区二区三区v视界 | 99久久人妻精品免费二区 | 色爱情人网站 | 美女毛片一区二区三区四区 | 3d动漫精品啪啪一区二区中 | 成人免费视频视频在线观看 免费 | 亚洲国产精品无码一区二区三区 | av在线亚洲欧洲日产一区二区 | 伊人久久大香线焦av综合影院 | 亚洲阿v天堂在线 | 成人免费视频在线观看 | 欧美人妻一区二区三区 | 中文字幕无码免费久久9一区9 | 蜜桃臀无码内射一区二区三区 | 欧美精品在线观看 | 老子影院午夜伦不卡 | 中文无码伦av中文字幕 | 国产日产欧产精品精品app | 国产成人精品必看 | 自拍偷自拍亚洲精品10p | 中文字幕乱妇无码av在线 | 亚洲 日韩 欧美 成人 在线观看 | 18黄暴禁片在线观看 | 欧美黑人巨大xxxxx | 大色综合色综合网站 | 成人欧美一区二区三区黑人 | 图片小说视频一区二区 | 精品国精品国产自在久国产87 | aⅴ在线视频男人的天堂 | 国产成人精品一区二区在线小狼 | 女人被男人躁得好爽免费视频 | 精品无码一区二区三区的天堂 | 国产精品多人p群无码 | 亚洲综合无码一区二区三区 | 在线欧美精品一区二区三区 | 亚洲中文字幕成人无码 | 日韩精品无码免费一区二区三区 | 成在人线av无码免观看麻豆 | 亚洲乱码日产精品bd | 性欧美大战久久久久久久 | 久久天天躁夜夜躁狠狠 | 亚洲国产精品毛片av不卡在线 | 亚洲大尺度无码无码专区 | 国产偷自视频区视频 | 人妻插b视频一区二区三区 | 国产成人精品久久亚洲高清不卡 | 国产精品理论片在线观看 | 欧美熟妇另类久久久久久多毛 | 欧美激情一区二区三区成人 | 亚洲综合色区中文字幕 | 国产精品亚洲专区无码不卡 | 成熟人妻av无码专区 | 国产精品毛多多水多 | 国产成人无码av在线影院 | 俺去俺来也在线www色官网 | 国产口爆吞精在线视频 | 中文字幕色婷婷在线视频 | 国产艳妇av在线观看果冻传媒 | 成熟人妻av无码专区 | 久久午夜无码鲁丝片午夜精品 | 久久综合九色综合97网 | 国产精品无码mv在线观看 | 久久精品人人做人人综合试看 | 女人被爽到呻吟gif动态图视看 | 久久97精品久久久久久久不卡 | 少妇激情av一区二区 | 99麻豆久久久国产精品免费 | 99久久久无码国产精品免费 | 丰满少妇高潮惨叫视频 | 动漫av网站免费观看 | 亚洲国产日韩a在线播放 | 综合网日日天干夜夜久久 | 久久久婷婷五月亚洲97号色 | 双乳奶水饱满少妇呻吟 | 成熟人妻av无码专区 | aa片在线观看视频在线播放 | 狠狠躁日日躁夜夜躁2020 | 国产一区二区三区日韩精品 | 国产精品人人爽人人做我的可爱 | 日韩精品成人一区二区三区 | 色一情一乱一伦一区二区三欧美 | 国产精品无码成人午夜电影 | 麻豆国产97在线 | 欧洲 | 久久国语露脸国产精品电影 | 国产性生交xxxxx无码 | 亚洲国产精品成人久久蜜臀 | 自拍偷自拍亚洲精品10p | 久久人人爽人人人人片 | 欧美性猛交xxxx富婆 | 国产日产欧产精品精品app | 色 综合 欧美 亚洲 国产 | 国产精品第一区揄拍无码 | 76少妇精品导航 | 亚洲爆乳精品无码一区二区三区 | 国产精品免费大片 | 国产亚洲人成在线播放 | 一本加勒比波多野结衣 | 国产av无码专区亚洲awww | 疯狂三人交性欧美 | 欧美精品一区二区精品久久 | 国产亚洲精品久久久久久 | 55夜色66夜色国产精品视频 | 377p欧洲日本亚洲大胆 | 天堂а√在线中文在线 | 国产人妻大战黑人第1集 | 亚洲一区二区三区国产精华液 | 久久国产精品萌白酱免费 | 国产欧美亚洲精品a | 人妻体内射精一区二区三四 | 乱中年女人伦av三区 | 任你躁在线精品免费 | 国产三级精品三级男人的天堂 | 性色av无码免费一区二区三区 | 免费乱码人妻系列无码专区 | 一本加勒比波多野结衣 | 日韩av无码一区二区三区不卡 | 两性色午夜免费视频 | 强奷人妻日本中文字幕 | √8天堂资源地址中文在线 | 强辱丰满人妻hd中文字幕 | 亚洲国精产品一二二线 | 婷婷五月综合缴情在线视频 | 欧美人与禽猛交狂配 | 中文字幕日韩精品一区二区三区 | 色欲人妻aaaaaaa无码 | 鲁一鲁av2019在线 | 狂野欧美激情性xxxx | 久久久av男人的天堂 | aⅴ亚洲 日韩 色 图网站 播放 | 久久久久免费看成人影片 | 亚洲欧美国产精品专区久久 | 欧洲精品码一区二区三区免费看 | 精品久久久久香蕉网 | 中文字幕色婷婷在线视频 | 国产精品第一区揄拍无码 | 99久久久无码国产精品免费 | 色婷婷香蕉在线一区二区 | 天堂无码人妻精品一区二区三区 | 日韩亚洲欧美精品综合 | 亚洲色成人中文字幕网站 | 亚洲精品成人av在线 | 牲交欧美兽交欧美 | 国产精品久久久一区二区三区 | 国产又爽又猛又粗的视频a片 | 久久精品一区二区三区四区 | 曰韩无码二三区中文字幕 | 欧洲精品码一区二区三区免费看 | 亚洲va中文字幕无码久久不卡 | 色综合天天综合狠狠爱 | 国产亚洲精品久久久ai换 | 中文字幕av无码一区二区三区电影 | 欧美放荡的少妇 | 久久亚洲精品中文字幕无男同 | 日韩av无码一区二区三区不卡 | 免费看少妇作爱视频 | 一本色道婷婷久久欧美 | 亚洲 日韩 欧美 成人 在线观看 | 丁香啪啪综合成人亚洲 | 97资源共享在线视频 | 人妻无码久久精品人妻 | 一本色道婷婷久久欧美 | 人人妻人人澡人人爽人人精品浪潮 | 国产成人无码区免费内射一片色欲 | 久久久亚洲欧洲日产国码αv | 精品久久8x国产免费观看 | 欧美性生交活xxxxxdddd | 欧美兽交xxxx×视频 | 欧美丰满老熟妇xxxxx性 | www国产亚洲精品久久网站 | 久久综合狠狠综合久久综合88 | 伊在人天堂亚洲香蕉精品区 | 又大又硬又爽免费视频 | 日日麻批免费40分钟无码 | 少妇人妻偷人精品无码视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 波多野结衣av一区二区全免费观看 | 国产香蕉97碰碰久久人人 | 欧美国产日韩久久mv | 国产真实乱对白精彩久久 | 在线视频网站www色 | 欧美怡红院免费全部视频 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲色大成网站www国产 | 亚洲七七久久桃花影院 | 国产精品久久久久影院嫩草 | 国产内射爽爽大片视频社区在线 | 无码人妻av免费一区二区三区 | 曰韩少妇内射免费播放 | 久久精品成人欧美大片 | 精品久久久久香蕉网 | 久久99精品久久久久久动态图 | 少妇被黑人到高潮喷出白浆 | 欧美大屁股xxxxhd黑色 | 日本va欧美va欧美va精品 | 伊人久久大香线蕉av一区二区 | 国产成人精品一区二区在线小狼 | 亲嘴扒胸摸屁股激烈网站 | 永久免费观看国产裸体美女 | 一本大道久久东京热无码av | 免费视频欧美无人区码 | 色欲综合久久中文字幕网 | 免费国产黄网站在线观看 | 国产真实乱对白精彩久久 | 国产香蕉尹人视频在线 | 国产香蕉尹人综合在线观看 | 国产精品人人爽人人做我的可爱 | 精品人人妻人人澡人人爽人人 | 国产精品福利视频导航 | 思思久久99热只有频精品66 | 精品亚洲韩国一区二区三区 | 成年美女黄网站色大免费全看 | 久久精品视频在线看15 | 国产超级va在线观看视频 | 久久无码人妻影院 | 熟妇人妻激情偷爽文 | 婷婷丁香五月天综合东京热 | 国产精品.xx视频.xxtv | 精品一区二区三区无码免费视频 | 成人无码视频免费播放 | 国产超碰人人爽人人做人人添 | 亚洲色www成人永久网址 | 无套内射视频囯产 | 女高中生第一次破苞av | 天天综合网天天综合色 | 国产超级va在线观看视频 | 欧美性生交活xxxxxdddd | 午夜丰满少妇性开放视频 | 伊人色综合久久天天小片 | 无码av免费一区二区三区试看 | 欧美zoozzooz性欧美 | 日韩精品无码一本二本三本色 | 漂亮人妻洗澡被公强 日日躁 | 无码av岛国片在线播放 | 国产亚洲人成在线播放 | 日韩精品一区二区av在线 | 国产又粗又硬又大爽黄老大爷视 | 综合网日日天干夜夜久久 | 色诱久久久久综合网ywww | 亚洲国产精品久久人人爱 | 永久免费观看美女裸体的网站 | 领导边摸边吃奶边做爽在线观看 | 国产精品va在线播放 | 人人妻人人澡人人爽精品欧美 | 国语自产偷拍精品视频偷 | 中文字幕无码日韩专区 | 无码中文字幕色专区 | 国产精品多人p群无码 | 国产人妻久久精品二区三区老狼 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲色大成网站www | 国产人妻大战黑人第1集 | 99视频精品全部免费免费观看 | 好屌草这里只有精品 | 熟女体下毛毛黑森林 | 亚洲成av人片天堂网无码】 | 国产一区二区不卡老阿姨 | 丰满少妇高潮惨叫视频 | 国产精品国产三级国产专播 | 亚洲精品国产a久久久久久 | 西西人体www44rt大胆高清 | 偷窥日本少妇撒尿chinese | 好爽又高潮了毛片免费下载 | 国产三级久久久精品麻豆三级 | 97精品人妻一区二区三区香蕉 | 国产内射老熟女aaaa | 亚洲国产精品久久久久久 | 亚洲一区二区三区四区 | 成人免费视频视频在线观看 免费 | 国产成人一区二区三区别 | v一区无码内射国产 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品无码一区二区三区的天堂 | 亚洲s色大片在线观看 | 久久国语露脸国产精品电影 | 日本护士xxxxhd少妇 | 亚洲熟妇色xxxxx亚洲 | 无码纯肉视频在线观看 | 无码人妻黑人中文字幕 | 亚洲日本一区二区三区在线 | 荫蒂被男人添的好舒服爽免费视频 | 久久99精品久久久久久动态图 | 在线 国产 欧美 亚洲 天堂 | 国产成人无码av一区二区 | 日产精品高潮呻吟av久久 | 欧美人与禽zoz0性伦交 | 亚洲gv猛男gv无码男同 | 清纯唯美经典一区二区 | 狂野欧美性猛交免费视频 | 成人免费视频视频在线观看 免费 | 中文字幕无码av波多野吉衣 | 一本色道久久综合狠狠躁 | 成 人 网 站国产免费观看 | 久久亚洲a片com人成 | 亚洲性无码av中文字幕 | 久久精品国产亚洲精品 | 亚洲成色在线综合网站 | 中文字幕 人妻熟女 | 人人妻人人澡人人爽精品欧美 | 中文毛片无遮挡高清免费 | 欧美老人巨大xxxx做受 | 97久久国产亚洲精品超碰热 | 亚洲精品综合一区二区三区在线 | 亚洲の无码国产の无码影院 | 日韩视频 中文字幕 视频一区 | 成人欧美一区二区三区黑人免费 | 亚洲国产精品成人久久蜜臀 | 国产精品无码mv在线观看 | 国产人妖乱国产精品人妖 | 久久99精品久久久久久动态图 | 国产成人精品一区二区在线小狼 | 国产另类ts人妖一区二区 | 国产又爽又黄又刺激的视频 | 欧美性生交xxxxx久久久 | 中文字幕人成乱码熟女app | 天堂无码人妻精品一区二区三区 | 国产成人一区二区三区别 | 精品国产青草久久久久福利 | 天天av天天av天天透 | 欧美黑人性暴力猛交喷水 | 国产精品美女久久久久av爽李琼 | 在线看片无码永久免费视频 | 一本无码人妻在中文字幕免费 | 无码人妻出轨黑人中文字幕 | 在线a亚洲视频播放在线观看 | 日韩欧美中文字幕公布 | 欧美黑人性暴力猛交喷水 | 亚洲中文字幕乱码av波多ji | 欧美性生交活xxxxxdddd | 性欧美牲交在线视频 | 亚洲精品国偷拍自产在线麻豆 | 日本乱偷人妻中文字幕 | 成人动漫在线观看 | 国产精品对白交换视频 | 女人高潮内射99精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 日本丰满熟妇videos | 亚洲码国产精品高潮在线 | 日本一区二区三区免费播放 | 亚洲国产精品一区二区第一页 | 欧美精品一区二区精品久久 | 欧美xxxx黑人又粗又长 | 熟妇人妻无乱码中文字幕 | 国产无套粉嫩白浆在线 | 天海翼激烈高潮到腰振不止 | 55夜色66夜色国产精品视频 | 好男人社区资源 | 风流少妇按摩来高潮 | 国产区女主播在线观看 | 久久人人97超碰a片精品 | 性啪啪chinese东北女人 | 国产在热线精品视频 | 亚洲s码欧洲m码国产av | 精品无人区无码乱码毛片国产 | а√天堂www在线天堂小说 | 国产精品亚洲综合色区韩国 | 5858s亚洲色大成网站www | 噜噜噜亚洲色成人网站 | 4hu四虎永久在线观看 | 精品国精品国产自在久国产87 | 无码人中文字幕 | 久久综合网欧美色妞网 | 久久97精品久久久久久久不卡 | 国产另类ts人妖一区二区 | 宝宝好涨水快流出来免费视频 | 亚洲色偷偷男人的天堂 | 内射老妇bbwx0c0ck | 少妇的肉体aa片免费 | 在线精品亚洲一区二区 | 性欧美大战久久久久久久 | 免费看男女做好爽好硬视频 | 国产高清不卡无码视频 | 久久精品成人欧美大片 | 国产乱人伦av在线无码 | 亚洲精品久久久久中文第一幕 | 欧美兽交xxxx×视频 | 亚洲精品国产品国语在线观看 | 无码av岛国片在线播放 | 中文字幕无码热在线视频 | 激情爆乳一区二区三区 | 欧美 亚洲 国产 另类 | 99久久久无码国产精品免费 | 国产特级毛片aaaaaaa高清 | 色婷婷久久一区二区三区麻豆 | 久久午夜无码鲁丝片秋霞 | 丰满少妇人妻久久久久久 | 亚洲国产高清在线观看视频 | 中文字幕无码视频专区 | 激情国产av做激情国产爱 | 18精品久久久无码午夜福利 | 国模大胆一区二区三区 | 国内少妇偷人精品视频 | 国产情侣作爱视频免费观看 | 国产麻豆精品精东影业av网站 | 东京热无码av男人的天堂 | 亚洲人成网站色7799 | 未满小14洗澡无码视频网站 | 成 人 免费观看网站 | 欧美刺激性大交 | 久久久久亚洲精品男人的天堂 | 欧美日本精品一区二区三区 | 久久精品国产日本波多野结衣 | 99精品视频在线观看免费 | 老熟妇乱子伦牲交视频 | 日本饥渴人妻欲求不满 | 又大又黄又粗又爽的免费视频 | 免费人成在线视频无码 | 国产成人无码区免费内射一片色欲 | 久久人人爽人人人人片 | 国产艳妇av在线观看果冻传媒 | 夜夜高潮次次欢爽av女 | 一个人看的视频www在线 | 国内丰满熟女出轨videos | 奇米影视888欧美在线观看 | 亚洲成av人综合在线观看 | 无码福利日韩神码福利片 | 老熟妇乱子伦牲交视频 | 久久www免费人成人片 | 综合人妻久久一区二区精品 | 日本精品人妻无码77777 天堂一区人妻无码 | 欧美freesex黑人又粗又大 | 日本爽爽爽爽爽爽在线观看免 | 国内丰满熟女出轨videos | 亚洲日韩中文字幕在线播放 | 国产suv精品一区二区五 | 青草青草久热国产精品 | 国产美女精品一区二区三区 | 日本护士xxxxhd少妇 | 国产精品第一国产精品 | 亚洲精品久久久久久久久久久 | 亚洲熟女一区二区三区 | 日产精品高潮呻吟av久久 | 国产在线精品一区二区三区直播 | 亚洲色欲色欲天天天www | 九九在线中文字幕无码 | √8天堂资源地址中文在线 | 久久成人a毛片免费观看网站 | 国产精品手机免费 | 亚洲欧美中文字幕5发布 | 18禁止看的免费污网站 | 在线亚洲高清揄拍自拍一品区 | 精品无人国产偷自产在线 | 露脸叫床粗话东北少妇 | 男人的天堂av网站 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲日韩av片在线观看 | 欧美熟妇另类久久久久久不卡 | 日韩亚洲欧美中文高清在线 | 亚洲一区二区三区国产精华液 | 日本精品人妻无码免费大全 | 亚洲天堂2017无码中文 | 中文字幕无线码 | 双乳奶水饱满少妇呻吟 | 国产亚洲精品久久久久久久 | 亚洲欧美综合区丁香五月小说 | 国产香蕉尹人综合在线观看 | 东北女人啪啪对白 | 亚洲精品一区二区三区婷婷月 | 日本肉体xxxx裸交 | 99精品视频在线观看免费 | 一二三四社区在线中文视频 | 午夜精品久久久久久久 | 自拍偷自拍亚洲精品10p | 无码人妻出轨黑人中文字幕 | 丰满妇女强制高潮18xxxx | а天堂中文在线官网 | 久久综合给合久久狠狠狠97色 | 精品日本一区二区三区在线观看 | 蜜桃视频插满18在线观看 | 亚洲人成影院在线无码按摩店 | а√资源新版在线天堂 | 性史性农村dvd毛片 | 久久久久99精品国产片 | 国产两女互慰高潮视频在线观看 | 欧美喷潮久久久xxxxx | 小sao货水好多真紧h无码视频 | www成人国产高清内射 | 大肉大捧一进一出视频出来呀 | 中文字幕无码日韩专区 | 久久久精品欧美一区二区免费 | 亚洲色欲色欲天天天www | 国产精品人妻一区二区三区四 | 中文精品无码中文字幕无码专区 | www一区二区www免费 | 熟女少妇人妻中文字幕 | 亚洲精品午夜国产va久久成人 | 男女猛烈xx00免费视频试看 | 一二三四在线观看免费视频 | 久久久久se色偷偷亚洲精品av | 玩弄人妻少妇500系列视频 | 色 综合 欧美 亚洲 国产 | 国产美女精品一区二区三区 | 欧美国产日韩亚洲中文 | 亚洲码国产精品高潮在线 | 97精品人妻一区二区三区香蕉 | 日本一区二区三区免费高清 | 99久久婷婷国产综合精品青草免费 | 欧美精品无码一区二区三区 | 欧美三级不卡在线观看 | 国产精品自产拍在线观看 | 在线观看国产午夜福利片 | 久久综合香蕉国产蜜臀av | 伊在人天堂亚洲香蕉精品区 | 色 综合 欧美 亚洲 国产 | 国产三级精品三级男人的天堂 | 漂亮人妻洗澡被公强 日日躁 | 最近免费中文字幕中文高清百度 | 激情爆乳一区二区三区 | 男女性色大片免费网站 | 国产熟女一区二区三区四区五区 | 久久久久人妻一区精品色欧美 | 99久久久无码国产aaa精品 | 久久国内精品自在自线 | 国产免费久久精品国产传媒 | 久久久久免费精品国产 | 人妻体内射精一区二区三四 | 夜夜高潮次次欢爽av女 | 国精产品一品二品国精品69xx | 国产精品自产拍在线观看 | 中文字幕乱妇无码av在线 | 久久天天躁狠狠躁夜夜免费观看 | 在线 国产 欧美 亚洲 天堂 | 国产精品亚洲综合色区韩国 | 成人一在线视频日韩国产 | 国产亚洲人成a在线v网站 | 无码人妻av免费一区二区三区 | 欧美人与物videos另类 | 国产九九九九九九九a片 | 国产真实夫妇视频 | 中文无码精品a∨在线观看不卡 | 久久精品女人天堂av免费观看 | 大肉大捧一进一出视频出来呀 | 在线观看欧美一区二区三区 | 1000部夫妻午夜免费 | 亚洲熟熟妇xxxx | 国产在线精品一区二区三区直播 | 国产肉丝袜在线观看 | 无码国模国产在线观看 | 国产精品免费大片 | 欧美日本免费一区二区三区 | 国产精品鲁鲁鲁 | 狂野欧美性猛交免费视频 | 蜜桃臀无码内射一区二区三区 | 蜜桃臀无码内射一区二区三区 | 国产69精品久久久久app下载 | 国产激情一区二区三区 | 夜夜高潮次次欢爽av女 | 99视频精品全部免费免费观看 | 97久久精品无码一区二区 | 少妇人妻大乳在线视频 | 人人妻人人澡人人爽人人精品浪潮 | 男人扒开女人内裤强吻桶进去 | 99在线 | 亚洲 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品丝袜黑色高跟鞋 | 四虎影视成人永久免费观看视频 | 久久久久久九九精品久 | 欧美日韩色另类综合 | 无码精品人妻一区二区三区av | 狂野欧美激情性xxxx | 蜜臀av在线播放 久久综合激激的五月天 | 欧美国产亚洲日韩在线二区 | 国产精品视频免费播放 | 午夜精品一区二区三区的区别 | 亚洲精品综合五月久久小说 | av无码电影一区二区三区 | 亚洲日韩av片在线观看 | 国产精品第一区揄拍无码 | 国产精品无码久久av | 欧美丰满熟妇xxxx | 影音先锋中文字幕无码 | 国产欧美熟妇另类久久久 | 无码国内精品人妻少妇 | 国产精品18久久久久久麻辣 | 色欲人妻aaaaaaa无码 | 国产绳艺sm调教室论坛 | 亚洲va中文字幕无码久久不卡 | 亚洲午夜久久久影院 | 欧美日韩色另类综合 | 日韩av无码中文无码电影 | 无码帝国www无码专区色综合 | 青草青草久热国产精品 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 奇米影视888欧美在线观看 | 夜精品a片一区二区三区无码白浆 | 久久久久亚洲精品男人的天堂 | 中文毛片无遮挡高清免费 | 精品欧洲av无码一区二区三区 | 亚洲性无码av中文字幕 | 日韩无套无码精品 | 无码国产乱人伦偷精品视频 | 日韩无码专区 | 玩弄中年熟妇正在播放 | 中文无码精品a∨在线观看不卡 | 无码av免费一区二区三区试看 | 在线观看欧美一区二区三区 | 巨爆乳无码视频在线观看 | 中文字幕av伊人av无码av | 国产精品无码mv在线观看 | 国产成人无码av片在线观看不卡 | 亚洲精品综合五月久久小说 | 日本熟妇人妻xxxxx人hd | 国产综合久久久久鬼色 | 无码人妻精品一区二区三区不卡 | 国产人妻精品一区二区三区不卡 | 久久综合给久久狠狠97色 | 亚洲无人区午夜福利码高清完整版 | 人妻体内射精一区二区三四 | 无码吃奶揉捏奶头高潮视频 | 美女扒开屁股让男人桶 | 给我免费的视频在线观看 | 在线精品国产一区二区三区 | 丰满人妻被黑人猛烈进入 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产午夜精品一区二区三区嫩草 | 亚洲欧美日韩综合久久久 | 久久久精品456亚洲影院 | 中文字幕乱码人妻无码久久 | 18黄暴禁片在线观看 | 网友自拍区视频精品 | 久久国产自偷自偷免费一区调 | 亚洲 高清 成人 动漫 | 一本大道久久东京热无码av | 中文字幕 亚洲精品 第1页 | 亚洲国产综合无码一区 | 国产人妻久久精品二区三区老狼 | 亚洲精品国产第一综合99久久 | 丰满妇女强制高潮18xxxx | 3d动漫精品啪啪一区二区中 | 天天爽夜夜爽夜夜爽 | 日本又色又爽又黄的a片18禁 | 蜜桃视频插满18在线观看 | 日韩精品成人一区二区三区 | 人妻少妇精品无码专区动漫 | 色婷婷av一区二区三区之红樱桃 | 国产人妻精品一区二区三区 | 日本又色又爽又黄的a片18禁 | 未满小14洗澡无码视频网站 | aⅴ亚洲 日韩 色 图网站 播放 | 色欲久久久天天天综合网精品 | 妺妺窝人体色www婷婷 | 男人扒开女人内裤强吻桶进去 | 日韩av激情在线观看 | 成人一区二区免费视频 | 国产精品对白交换视频 | 色婷婷综合中文久久一本 | 永久免费精品精品永久-夜色 | 自拍偷自拍亚洲精品10p | 动漫av网站免费观看 | 国产乱人偷精品人妻a片 | 免费中文字幕日韩欧美 | 国产精品无套呻吟在线 | 国产人妻精品一区二区三区不卡 | 国产精品久久久久7777 | 成人无码精品1区2区3区免费看 | 免费观看的无遮挡av | 玩弄中年熟妇正在播放 | 亚洲s码欧洲m码国产av | 国产成人无码午夜视频在线观看 | 亚洲成av人片天堂网无码】 | 午夜精品久久久内射近拍高清 | 国产精品沙发午睡系列 | 久久精品中文闷骚内射 | 狠狠色欧美亚洲狠狠色www | 成人免费视频一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 色综合久久久无码网中文 | 丰满人妻翻云覆雨呻吟视频 | 久久熟妇人妻午夜寂寞影院 | 精品厕所偷拍各类美女tp嘘嘘 | 免费观看激色视频网站 | 欧美日韩一区二区综合 | 国产乱人伦av在线无码 | 偷窥日本少妇撒尿chinese | 亚洲中文字幕成人无码 | 青草青草久热国产精品 | 成 人 网 站国产免费观看 | 国产又爽又黄又刺激的视频 | 精品国产乱码久久久久乱码 | 久久视频在线观看精品 | 性欧美牲交在线视频 | 无套内射视频囯产 | 中国女人内谢69xxxxxa片 | 亚洲 另类 在线 欧美 制服 | 国产九九九九九九九a片 | 高潮毛片无遮挡高清免费视频 | 曰韩少妇内射免费播放 | 欧美性生交xxxxx久久久 | 18无码粉嫩小泬无套在线观看 | 国产情侣作爱视频免费观看 | 丰满肥臀大屁股熟妇激情视频 | 欧美性猛交内射兽交老熟妇 | 麻豆国产97在线 | 欧洲 | 丰满少妇熟乱xxxxx视频 | 国产精品久久精品三级 | 高清不卡一区二区三区 | 中文无码伦av中文字幕 | 高清国产亚洲精品自在久久 | 久9re热视频这里只有精品 | 小泽玛莉亚一区二区视频在线 | 无码国产色欲xxxxx视频 | 亚洲乱码国产乱码精品精 | 亚洲日本va午夜在线电影 | 精品亚洲韩国一区二区三区 | 国产精品国产三级国产专播 | 中文字幕无码av波多野吉衣 | 精品国产福利一区二区 | 久久综合色之久久综合 | 国产明星裸体无码xxxx视频 | 99久久人妻精品免费一区 | 精品国产麻豆免费人成网站 | 蜜桃臀无码内射一区二区三区 | 国产免费久久精品国产传媒 | 无码中文字幕色专区 | 国产成人一区二区三区别 | 成人免费视频一区二区 | 男女爱爱好爽视频免费看 | 久久www免费人成人片 | 亚洲日韩一区二区 | 九九综合va免费看 | 亚洲综合无码一区二区三区 | 又大又硬又爽免费视频 | 欧美人与善在线com | 蜜桃臀无码内射一区二区三区 | 伊人久久婷婷五月综合97色 | 日韩av无码一区二区三区 | 无码一区二区三区在线 | 国产精品久久精品三级 | 爱做久久久久久 | 亚洲中文字幕无码一久久区 | 欧美人与善在线com | 亲嘴扒胸摸屁股激烈网站 | 国产精品久久久久久亚洲影视内衣 | 狠狠躁日日躁夜夜躁2020 | 人妻互换免费中文字幕 | 亚洲精品一区二区三区在线 | 日本一区二区三区免费高清 | 亚洲综合在线一区二区三区 | 国产suv精品一区二区五 | 亚洲国产精品一区二区美利坚 | 国产成人人人97超碰超爽8 | 无人区乱码一区二区三区 | 精品国产成人一区二区三区 | a片在线免费观看 | 久激情内射婷内射蜜桃人妖 | 红桃av一区二区三区在线无码av | 狂野欧美性猛xxxx乱大交 | 少妇人妻偷人精品无码视频 | 97色伦图片97综合影院 | 久久精品女人天堂av免费观看 | 婷婷丁香六月激情综合啪 | 亚洲男人av天堂午夜在 | 99国产精品白浆在线观看免费 | 乱码午夜-极国产极内射 | 无码av岛国片在线播放 | 久久精品中文字幕一区 | 牲欲强的熟妇农村老妇女视频 | 成人无码精品1区2区3区免费看 | 少妇激情av一区二区 | 男女超爽视频免费播放 | 精品成在人线av无码免费看 | 最新国产麻豆aⅴ精品无码 | 精品一区二区三区波多野结衣 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国産精品久久久久久久 | 人人妻人人澡人人爽精品欧美 | 丰满诱人的人妻3 | 全球成人中文在线 | 国内丰满熟女出轨videos | 在线精品亚洲一区二区 | 欧美三级a做爰在线观看 | 67194成是人免费无码 | 欧美日韩精品 | 欧美日韩一区二区免费视频 | 内射白嫩少妇超碰 | 内射爽无广熟女亚洲 | 久久无码人妻影院 | 性欧美大战久久久久久久 | 女人和拘做爰正片视频 | 玩弄中年熟妇正在播放 | 人妻互换免费中文字幕 | 丰腴饱满的极品熟妇 | 日本精品人妻无码77777 天堂一区人妻无码 | 99久久久国产精品无码免费 | 曰韩少妇内射免费播放 | 国产绳艺sm调教室论坛 | 内射后入在线观看一区 | 人妻有码中文字幕在线 | 无码人妻丰满熟妇区毛片18 | a国产一区二区免费入口 | 亚洲天堂2017无码中文 | 国产超碰人人爽人人做人人添 | 亚洲乱码国产乱码精品精 | 一本久久a久久精品亚洲 | 日韩av无码中文无码电影 | 一本色道久久综合亚洲精品不卡 | 亚洲 高清 成人 动漫 | 伊人久久婷婷五月综合97色 | 亚洲阿v天堂在线 | 国产午夜福利100集发布 | 领导边摸边吃奶边做爽在线观看 | 高中生自慰www网站 | 18禁黄网站男男禁片免费观看 | 男人的天堂av网站 | 内射欧美老妇wbb | 女人被男人躁得好爽免费视频 | 久久精品国产一区二区三区肥胖 | 熟女少妇在线视频播放 | 国产成人亚洲综合无码 | 东京热无码av男人的天堂 | 牛和人交xxxx欧美 | 久久国产精品_国产精品 | 日韩 欧美 动漫 国产 制服 | 久久人人爽人人爽人人片ⅴ | 丝袜美腿亚洲一区二区 | 国产午夜手机精彩视频 | 久久综合给合久久狠狠狠97色 | 日本又色又爽又黄的a片18禁 | 国产一区二区不卡老阿姨 | 久久www免费人成人片 | 在线 国产 欧美 亚洲 天堂 | 夜先锋av资源网站 | 日本va欧美va欧美va精品 | 无码播放一区二区三区 | 天天燥日日燥 | 日本一卡二卡不卡视频查询 | 国产精品内射视频免费 | 国产一区二区三区四区五区加勒比 | 国产猛烈高潮尖叫视频免费 | 人妻插b视频一区二区三区 | 无码纯肉视频在线观看 | 国产成人精品优优av | 曰本女人与公拘交酡免费视频 | 亚洲精品www久久久 | 免费人成在线视频无码 | 亚洲日韩一区二区 | 精品乱码久久久久久久 | 久久伊人色av天堂九九小黄鸭 | 国产精品办公室沙发 | 一个人看的www免费视频在线观看 | 国产亲子乱弄免费视频 | 十八禁视频网站在线观看 | 亚洲 欧美 激情 小说 另类 | 图片区 小说区 区 亚洲五月 | 国产精品视频免费播放 | 亚洲一区av无码专区在线观看 | 精品国偷自产在线 | 草草网站影院白丝内射 | 午夜精品一区二区三区在线观看 | 中文字幕亚洲情99在线 | 国内丰满熟女出轨videos | 亚洲自偷自拍另类第1页 | 亚洲中文字幕乱码av波多ji | 三上悠亚人妻中文字幕在线 | 大乳丰满人妻中文字幕日本 | 永久免费观看美女裸体的网站 | 无码播放一区二区三区 | 亚洲综合无码一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 玩弄少妇高潮ⅹxxxyw | 国产精品99久久精品爆乳 | 国产av一区二区三区最新精品 | 人妻少妇精品无码专区动漫 | 亚洲春色在线视频 | 少妇被黑人到高潮喷出白浆 | 国产人妻久久精品二区三区老狼 | 久久亚洲国产成人精品性色 | 99精品视频在线观看免费 | 图片区 小说区 区 亚洲五月 | 无码精品国产va在线观看dvd | 国产麻豆精品一区二区三区v视界 | 久久97精品久久久久久久不卡 | 国产一区二区三区日韩精品 | 丰满少妇女裸体bbw | 亚洲精品国产品国语在线观看 | 国产精品人人妻人人爽 | 欧美 日韩 人妻 高清 中文 | 国产真实乱对白精彩久久 | 美女扒开屁股让男人桶 | 国产无遮挡吃胸膜奶免费看 | 国产区女主播在线观看 | 成年美女黄网站色大免费全看 | 免费看少妇作爱视频 | 久久人人爽人人爽人人片av高清 | 青春草在线视频免费观看 | 男人扒开女人内裤强吻桶进去 | 免费人成在线观看网站 | 色偷偷人人澡人人爽人人模 | 国产精品办公室沙发 | 中国女人内谢69xxxxxa片 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 在教室伦流澡到高潮hnp视频 | 一本大道久久东京热无码av | 伊人久久婷婷五月综合97色 | 日本精品久久久久中文字幕 | 荫蒂添的好舒服视频囗交 | 少妇性荡欲午夜性开放视频剧场 | 久久99热只有频精品8 | 亚洲国产欧美在线成人 | 强辱丰满人妻hd中文字幕 | 亚洲经典千人经典日产 | 欧美精品无码一区二区三区 | 国产精品美女久久久网av | 国产在线精品一区二区三区直播 | 日韩精品无码一本二本三本色 | 亚洲精品一区二区三区婷婷月 | 国产情侣作爱视频免费观看 | 成人精品一区二区三区中文字幕 | 国产精品18久久久久久麻辣 | 亚洲人成网站色7799 | 亚洲国产av美女网站 | 免费人成在线视频无码 | 无码国产乱人伦偷精品视频 | 无人区乱码一区二区三区 | 高清国产亚洲精品自在久久 | 亚洲精品午夜国产va久久成人 | 中文字幕无码免费久久99 | 一本久久a久久精品亚洲 | 99精品久久毛片a片 | 精品无码国产自产拍在线观看蜜 | 国产精品无码一区二区桃花视频 | 99久久人妻精品免费二区 | 水蜜桃色314在线观看 | 一本大道久久东京热无码av | 欧美 日韩 人妻 高清 中文 | 男人的天堂2018无码 | 伊在人天堂亚洲香蕉精品区 | 国产精品99爱免费视频 | 人妻无码αv中文字幕久久琪琪布 | 99久久精品无码一区二区毛片 | 日韩在线不卡免费视频一区 | 亚洲 欧美 激情 小说 另类 | 鲁大师影院在线观看 | 一区二区三区高清视频一 | 四虎国产精品免费久久 | 岛国片人妻三上悠亚 | 色综合久久久久综合一本到桃花网 | 欧美自拍另类欧美综合图片区 | 国产亚洲精品久久久久久 | 色五月丁香五月综合五月 | 兔费看少妇性l交大片免费 | 中文无码精品a∨在线观看不卡 | 中文字幕无码av激情不卡 | 男人的天堂2018无码 | 性色av无码免费一区二区三区 | 99久久久国产精品无码免费 | 亚洲国精产品一二二线 | 久久国语露脸国产精品电影 | 亚洲区小说区激情区图片区 | 夜精品a片一区二区三区无码白浆 | 国产色视频一区二区三区 | 国产手机在线αⅴ片无码观看 | 曰韩无码二三区中文字幕 | 国产高清av在线播放 | 国产莉萝无码av在线播放 | 精品一二三区久久aaa片 | 人人妻人人澡人人爽欧美一区九九 | 亚洲综合无码久久精品综合 | 欧美大屁股xxxxhd黑色 | 久久综合色之久久综合 | 香蕉久久久久久av成人 | 亚洲中文无码av永久不收费 | 帮老师解开蕾丝奶罩吸乳网站 | 波多野42部无码喷潮在线 | 精品一区二区三区无码免费视频 | 又大又硬又黄的免费视频 | 日韩欧美群交p片內射中文 | 免费乱码人妻系列无码专区 | 国产猛烈高潮尖叫视频免费 | 爆乳一区二区三区无码 | 对白脏话肉麻粗话av | 青青青手机频在线观看 | 国产精品久久国产三级国 | 欧美精品在线观看 | 日本大乳高潮视频在线观看 | 无套内射视频囯产 | 波多野结衣 黑人 | 免费无码肉片在线观看 | 亚洲娇小与黑人巨大交 | 亚洲精品午夜无码电影网 | 国产精品无码成人午夜电影 | 熟妇人妻激情偷爽文 | 在线播放免费人成毛片乱码 | 特级做a爰片毛片免费69 | 天堂一区人妻无码 | 亚洲精品成a人在线观看 | 色一情一乱一伦一视频免费看 | 东京一本一道一二三区 | 亚洲精品鲁一鲁一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 亚洲成a人片在线观看日本 | 国产精品无码mv在线观看 | 国产精品爱久久久久久久 | 久久久久av无码免费网 | 国产成人精品久久亚洲高清不卡 | 人人爽人人澡人人高潮 | 日本丰满熟妇videos | 丰满人妻精品国产99aⅴ | 久久人妻内射无码一区三区 | 亚洲日韩av一区二区三区四区 | 国产又爽又猛又粗的视频a片 | 日本护士xxxxhd少妇 | 国产麻豆精品一区二区三区v视界 | 日本一区二区三区免费播放 | www国产亚洲精品久久久日本 | 精品国产一区二区三区av 性色 | 亚洲色欲久久久综合网东京热 | 免费乱码人妻系列无码专区 | 无码av最新清无码专区吞精 | yw尤物av无码国产在线观看 | 中文字幕无码免费久久9一区9 | 精品亚洲韩国一区二区三区 | 亚洲男人av天堂午夜在 | 久久久久se色偷偷亚洲精品av | 高清无码午夜福利视频 | 成人无码精品一区二区三区 | 午夜精品久久久久久久久 | 久久精品女人的天堂av | 风流少妇按摩来高潮 | 一区二区三区乱码在线 | 欧洲 | 东北女人啪啪对白 | 国产成人一区二区三区在线观看 | 午夜性刺激在线视频免费 | 娇妻被黑人粗大高潮白浆 | 老熟妇乱子伦牲交视频 | √天堂资源地址中文在线 | 亚洲精品久久久久久一区二区 | 天堂在线观看www | 乌克兰少妇xxxx做受 | 在线精品国产一区二区三区 | 精品一区二区不卡无码av | 国产人妻久久精品二区三区老狼 | 国产乱子伦视频在线播放 | 国产精品亚洲专区无码不卡 | 成人片黄网站色大片免费观看 | 国产真实伦对白全集 | ass日本丰满熟妇pics | 亚洲人成影院在线观看 | 亚洲国产成人av在线观看 | 国模大胆一区二区三区 | 岛国片人妻三上悠亚 | 国产乱人偷精品人妻a片 | 国产va免费精品观看 | 婷婷丁香六月激情综合啪 | 男人和女人高潮免费网站 | ass日本丰满熟妇pics | 大屁股大乳丰满人妻 | 免费无码一区二区三区蜜桃大 | 2020久久超碰国产精品最新 | 99久久99久久免费精品蜜桃 | 丰腴饱满的极品熟妇 | 啦啦啦www在线观看免费视频 | 国产激情综合五月久久 | 久久午夜夜伦鲁鲁片无码免费 | 狂野欧美性猛xxxx乱大交 | 熟妇人妻激情偷爽文 | 国产精品无码一区二区三区不卡 | 国产人妻精品一区二区三区不卡 | 俺去俺来也www色官网 | 中文字幕无码日韩专区 | 久久精品人妻少妇一区二区三区 | 乱码午夜-极国产极内射 | 2020久久超碰国产精品最新 | 国产后入清纯学生妹 | 免费无码av一区二区 | 亚洲の无码国产の无码影院 | 免费观看的无遮挡av | 国内精品人妻无码久久久影院蜜桃 | 久久99精品国产.久久久久 | 国产婷婷色一区二区三区在线 | 漂亮人妻洗澡被公强 日日躁 | 强伦人妻一区二区三区视频18 | 内射巨臀欧美在线视频 | 久久国语露脸国产精品电影 | 日本大乳高潮视频在线观看 | 国产莉萝无码av在线播放 | 超碰97人人做人人爱少妇 | 久久国内精品自在自线 | 国内精品九九久久久精品 | 啦啦啦www在线观看免费视频 | 男人的天堂av网站 | 国产午夜亚洲精品不卡 | 亚洲国产日韩a在线播放 | 国产人妻精品一区二区三区不卡 | 国产熟妇高潮叫床视频播放 | 精品熟女少妇av免费观看 | 少妇无套内谢久久久久 | 亚洲精品美女久久久久久久 | 中文字幕无码av激情不卡 | 99国产欧美久久久精品 | 国产人妻久久精品二区三区老狼 | 成人免费视频在线观看 | 桃花色综合影院 | 中文字幕人妻无码一夲道 | 欧美xxxx黑人又粗又长 | 国产精品无码mv在线观看 | 精品成人av一区二区三区 | 国产成人精品无码播放 | 又大又紧又粉嫩18p少妇 | 欧美人妻一区二区三区 | 亚洲精品一区三区三区在线观看 | 久久人人爽人人人人片 | 日本一区二区三区免费播放 | 人妻尝试又大又粗久久 | 夜精品a片一区二区三区无码白浆 | 国产69精品久久久久app下载 | 久久国产精品_国产精品 | 国产一区二区三区日韩精品 | 少妇性荡欲午夜性开放视频剧场 | 国产精品久免费的黄网站 | 波多野结衣乳巨码无在线观看 | 水蜜桃av无码 | 国产97人人超碰caoprom | 精品国偷自产在线 | 俺去俺来也在线www色官网 | 亚洲日本一区二区三区在线 | 精品无人国产偷自产在线 | 97色伦图片97综合影院 | 日韩人妻系列无码专区 | 亚洲の无码国产の无码步美 | 大乳丰满人妻中文字幕日本 | 亚洲精品一区二区三区在线 | 高潮毛片无遮挡高清免费视频 | 99精品久久毛片a片 | 波多野结衣一区二区三区av免费 | 亚洲国产精品久久久天堂 | 久久人妻内射无码一区三区 | 夜精品a片一区二区三区无码白浆 | 国产特级毛片aaaaaaa高清 | 精品午夜福利在线观看 | 无套内谢的新婚少妇国语播放 | 精品成在人线av无码免费看 | 免费国产黄网站在线观看 | 久久国产精品二国产精品 | 中文字幕人成乱码熟女app | 国产精品va在线播放 | 少妇无码av无码专区在线观看 | 一本一道久久综合久久 | 俺去俺来也www色官网 | 丝袜 中出 制服 人妻 美腿 | 久久久久久九九精品久 | 人妻熟女一区 | 中文字幕人妻无码一区二区三区 | 亚洲精品无码人妻无码 | 国产无遮挡又黄又爽免费视频 | 波多野结衣一区二区三区av免费 | 亚洲精品一区二区三区四区五区 | 亚洲人成人无码网www国产 | 奇米影视7777久久精品 | 精品人妻人人做人人爽夜夜爽 | 三级4级全黄60分钟 | 国产做国产爱免费视频 | 激情五月综合色婷婷一区二区 | 久久99精品久久久久久 | 亚洲欧洲日本综合aⅴ在线 | 女人被爽到呻吟gif动态图视看 | 麻豆蜜桃av蜜臀av色欲av | 国产特级毛片aaaaaaa高清 | 精品亚洲成av人在线观看 | 99久久婷婷国产综合精品青草免费 | 久久成人a毛片免费观看网站 | 久久久久免费看成人影片 | 图片区 小说区 区 亚洲五月 | 国产精品久免费的黄网站 | 亚洲精品国偷拍自产在线麻豆 | 55夜色66夜色国产精品视频 | 丰满少妇人妻久久久久久 | 精品欧洲av无码一区二区三区 | 55夜色66夜色国产精品视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 色婷婷欧美在线播放内射 | 久9re热视频这里只有精品 | 无码人妻精品一区二区三区下载 | 久久亚洲国产成人精品性色 | 亚洲va欧美va天堂v国产综合 | 日韩精品一区二区av在线 | 国产午夜亚洲精品不卡下载 | 国产精品美女久久久 | 亚洲一区av无码专区在线观看 | 波多野结衣av一区二区全免费观看 | 亚洲成av人片在线观看无码不卡 | 性开放的女人aaa片 | 永久免费观看美女裸体的网站 | 2020久久香蕉国产线看观看 | 久久久久国色av免费观看性色 | 亚洲va中文字幕无码久久不卡 | 亚洲国产精品无码一区二区三区 | 中文精品久久久久人妻不卡 | 国产真实伦对白全集 | 国产无遮挡又黄又爽又色 | 久久97精品久久久久久久不卡 | 俺去俺来也www色官网 | 午夜福利不卡在线视频 | 女高中生第一次破苞av | 精品乱子伦一区二区三区 | 好男人社区资源 | 国产成人av免费观看 | 中文字幕人妻无码一区二区三区 | 夜夜高潮次次欢爽av女 | 午夜精品久久久内射近拍高清 | 人妻熟女一区 | 久久久精品成人免费观看 | 亚洲乱码国产乱码精品精 | 国产真实乱对白精彩久久 | 国产又粗又硬又大爽黄老大爷视 | 国产亚洲精品精品国产亚洲综合 | 亚洲中文字幕无码中文字在线 | 欧美性猛交xxxx富婆 | 领导边摸边吃奶边做爽在线观看 | 性开放的女人aaa片 | 久久视频在线观看精品 | 人人超人人超碰超国产 | 国产精品第一区揄拍无码 | 少妇高潮一区二区三区99 | 天天摸天天碰天天添 | 日韩精品乱码av一区二区 | 欧美大屁股xxxxhd黑色 | 亚洲gv猛男gv无码男同 | 久久精品女人的天堂av | 亚洲а∨天堂久久精品2021 | 日日摸日日碰夜夜爽av | 成人免费视频一区二区 | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品久久福利网站 | a片免费视频在线观看 | 色妞www精品免费视频 | 人妻与老人中文字幕 | 精品国产青草久久久久福利 | 色综合久久久久综合一本到桃花网 | 欧美日本免费一区二区三区 | 鲁一鲁av2019在线 | 麻豆国产97在线 | 欧洲 | 一本无码人妻在中文字幕免费 | 妺妺窝人体色www婷婷 | 欧美日本免费一区二区三区 | 最近的中文字幕在线看视频 | 亚洲自偷精品视频自拍 | 99riav国产精品视频 | 水蜜桃av无码 | 亚洲日韩av一区二区三区四区 | 久久综合香蕉国产蜜臀av | 亚洲爆乳无码专区 | 少妇的肉体aa片免费 | 国产suv精品一区二区五 | 中文精品无码中文字幕无码专区 | 国产精品久免费的黄网站 | 亚洲精品一区国产 | 亚洲熟熟妇xxxx | 色婷婷综合中文久久一本 | 亚洲精品久久久久avwww潮水 | 99麻豆久久久国产精品免费 | √8天堂资源地址中文在线 | 黑人巨大精品欧美黑寡妇 | 日韩精品一区二区av在线 | 少妇人妻大乳在线视频 | 奇米影视7777久久精品人人爽 | 18精品久久久无码午夜福利 | 日本一卡二卡不卡视频查询 | 麻豆成人精品国产免费 | 伊在人天堂亚洲香蕉精品区 | 国产精品美女久久久 | 少妇人妻偷人精品无码视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 丝袜人妻一区二区三区 | 正在播放老肥熟妇露脸 | 天干天干啦夜天干天2017 | 精品国产一区二区三区四区 | 亚洲国产精品无码一区二区三区 | 亚洲国产精品久久久久久 | 无码毛片视频一区二区本码 | 久久久久亚洲精品男人的天堂 | 久久久久人妻一区精品色欧美 | 日韩精品一区二区av在线 | 久久精品国产一区二区三区肥胖 | 亚洲成a人片在线观看无码 | 欧美激情内射喷水高潮 | 国产精品无码久久av | 野狼第一精品社区 | 中文字幕无码av激情不卡 | 成人精品视频一区二区三区尤物 | 欧美黑人乱大交 | 两性色午夜视频免费播放 | 亚洲中文字幕久久无码 | 2020久久超碰国产精品最新 | 国产熟女一区二区三区四区五区 | 亚洲色无码一区二区三区 | 在线观看国产午夜福利片 | 亚洲gv猛男gv无码男同 | 天堂亚洲免费视频 | 国产精品无码mv在线观看 | 亚洲国产精品无码一区二区三区 | 国产亚洲美女精品久久久2020 | 乌克兰少妇xxxx做受 | 亚洲日韩av一区二区三区中文 | 小sao货水好多真紧h无码视频 | 国产一区二区三区日韩精品 | 免费国产成人高清在线观看网站 | 日本在线高清不卡免费播放 | 精品无人区无码乱码毛片国产 | 免费视频欧美无人区码 | 久久综合网欧美色妞网 | 激情五月综合色婷婷一区二区 | 色综合久久中文娱乐网 | 在线天堂新版最新版在线8 | 国产高清不卡无码视频 | 男人扒开女人内裤强吻桶进去 | 国产成人无码a区在线观看视频app | 理论片87福利理论电影 | 67194成是人免费无码 | 国产亚av手机在线观看 | 国产后入清纯学生妹 | 男人扒开女人内裤强吻桶进去 | 日韩精品久久久肉伦网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲欧美日韩成人高清在线一区 | 日韩在线不卡免费视频一区 | 国产亲子乱弄免费视频 | 亚洲狠狠色丁香婷婷综合 | 国产亚洲人成在线播放 | 成熟人妻av无码专区 | www一区二区www免费 | 人妻插b视频一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 九九久久精品国产免费看小说 | 成年美女黄网站色大免费视频 | 国产电影无码午夜在线播放 | 人人妻人人澡人人爽欧美一区 | 久久97精品久久久久久久不卡 | 欧美阿v高清资源不卡在线播放 | 日本一卡2卡3卡四卡精品网站 | 国产精品久久久久久亚洲影视内衣 | 国产色视频一区二区三区 | 无码人妻丰满熟妇区毛片18 | 欧美老人巨大xxxx做受 | 高中生自慰www网站 | 日日摸天天摸爽爽狠狠97 | 丝袜足控一区二区三区 | 日韩精品无码一本二本三本色 | 国产黑色丝袜在线播放 | 欧美第一黄网免费网站 | 欧美黑人巨大xxxxx | 午夜精品一区二区三区的区别 | 国产精品沙发午睡系列 | 丰腴饱满的极品熟妇 | 色婷婷欧美在线播放内射 | 成人性做爰aaa片免费看 | 午夜性刺激在线视频免费 | 好男人社区资源 | 乌克兰少妇性做爰 | 日韩av无码中文无码电影 | 人妻与老人中文字幕 | 人妻互换免费中文字幕 | 奇米影视7777久久精品人人爽 | 国产精品怡红院永久免费 | 亚洲欧美日韩成人高清在线一区 | 国产精品鲁鲁鲁 | 欧美 丝袜 自拍 制服 另类 | 亚洲国产欧美在线成人 | 亚洲精品综合五月久久小说 | 国产农村妇女高潮大叫 | 东京热一精品无码av | 亚洲阿v天堂在线 | 久久精品人妻少妇一区二区三区 | 日本免费一区二区三区最新 | 亚洲综合精品香蕉久久网 | 精品无码成人片一区二区98 | 天干天干啦夜天干天2017 | 国产精品久免费的黄网站 | 亚洲色欲色欲欲www在线 | 欧美乱妇无乱码大黄a片 | 精品国产青草久久久久福利 | 中文亚洲成a人片在线观看 | 久久精品国产精品国产精品污 | 国产午夜无码精品免费看 | 国产精品亚洲专区无码不卡 | 亚洲色大成网站www | 免费乱码人妻系列无码专区 | 亚洲自偷自拍另类第1页 | 久久天天躁狠狠躁夜夜免费观看 | 青草视频在线播放 | 性做久久久久久久免费看 | 性做久久久久久久免费看 | 自拍偷自拍亚洲精品被多人伦好爽 | 日本丰满护士爆乳xxxx | av人摸人人人澡人人超碰下载 | 国产偷国产偷精品高清尤物 | 99精品无人区乱码1区2区3区 | 精品国产aⅴ无码一区二区 | 内射老妇bbwx0c0ck | 国产精品美女久久久久av爽李琼 | 色欲综合久久中文字幕网 | 精品国产青草久久久久福利 | 亚洲爆乳无码专区 | 人人妻人人澡人人爽欧美一区 | 一个人免费观看的www视频 | 人妻少妇精品无码专区动漫 | 永久黄网站色视频免费直播 | 亚洲a无码综合a国产av中文 | 久久精品国产大片免费观看 |