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

如何設(shè)計(jì)一個(gè)好用的 React Image 組件?

共 13368字,需瀏覽 27分鐘

 ·

2021-07-01 02:44

點(diǎn)擊上方關(guān)注 前端技術(shù)江湖一起學(xué)習(xí),天天進(jìn)步


前言

本文為筆者閱讀 react-image[1] 源碼過程中的總結(jié),若有所錯(cuò)漏煩請(qǐng)指出。? 倉庫傳送門[2]

作者:海秋

https://github.com/worldzhao/blog/issues/1

<img />可以說是開發(fā)過程中極其常用的標(biāo)簽了。但是很多同學(xué)都是<img src="xxx.png" />一把梭,直到 UI 小姐姐來找你談?wù)勅松硐耄?/p>

  1. 圖片加載太慢,需要展示loading占位符;
  2. 圖片加載失敗,加載備選圖片或展示error占位符。

作為開發(fā)者的我們,可能會(huì)經(jīng)歷以下幾個(gè)階段:

  • 第一階段:img標(biāo)簽上使用onLoad以及onError進(jìn)行處理;
  • 第二階段:寫一個(gè)較為通用的組件;
  • 第三階段:抽離 hooks,使用方自定義視圖組件(當(dāng)然也要提供基本組件);

現(xiàn)在讓我們直接從第三階段開始,看看如何使用少量代碼打造一個(gè)易用性、封裝性以及擴(kuò)展性俱佳的image組件。

preview.gif

useImage

首先分析可復(fù)用的邏輯,可以發(fā)現(xiàn)使用者需要關(guān)注三個(gè)狀態(tài):loading、error以及src,畢竟加載圖片也是異步請(qǐng)求嘛。

對(duì) react-use[3] 熟悉的同學(xué)會(huì)很容易聯(lián)想到useAsync。

自定義一個(gè) hooks,接收?qǐng)D片鏈接作為參數(shù),返回調(diào)用方需要的三個(gè)狀態(tài)。

基礎(chǔ)實(shí)現(xiàn)

import * as React from "react";

// 將圖片加載轉(zhuǎn)為promise調(diào)用形式
function imgPromise(src: string{
  return new Promise((resolve, reject) => {
    const i = new Image();
    i.onload = () => resolve();
    i.onerror = reject;
    i.src = src;
  });
}

function useImage({ src }: { src: string }): {
  src: string | undefined,
  isLoading: boolean,
  error: any,
} {
  const [loading, setLoading] = React.useState(true);
  const [error, setError] = React.useState(null);
  const [value, setValue] = (React.useState < string) | (undefined > undefined);

  React.useEffect(() => {
    imgPromise(src)
      .then(() => {
        // 加載成功
        setLoading(false);
        setValue(src);
      })
      .catch((error) => {
        // 加載失敗
        setLoading(false);
        setError(error);
      });
  }, [src]);

  return { isLoading: loading, src: value, error: error };
}

我們已經(jīng)完成了最基礎(chǔ)的實(shí)現(xiàn),現(xiàn)在來慢慢優(yōu)化。

性能優(yōu)化

對(duì)于同一張圖片來講,在組件 A 加載過的圖片,組件 B 不用再走一遍new Image()的流程,直接返回上一次結(jié)果即可。

+ const cache: {
+  [key: string]: Promise<void>;
+ } = {};

function useImage({
  src,
}: {
  src: string;
}): { src: string | undefined; isLoading: boolean; error: any } {
  const [loading, setLoading] = React.useState(true);
  const [error, setError] = React.useState(null);
  const [value, setValue] = React.useState<string | undefined>(undefined);

  React.useEffect(() => {
+   if (!cache[src]) {
+     cache[src] = imgPromise(src);
+   }

-   imgPromise(src)
+   cache[src]
      .then(() => {
        setLoading(false);
        setValue(src);
      })
      .catch(error => {
        setLoading(false);
        setError(error);
      });
  }, [src]);

  return { isLoading: loading, src: value, error: error };
}

優(yōu)化了一丟丟性能。

支持 srcList

上文提到過一點(diǎn):圖片加載失敗,加載備選圖片或展示error占位符。

展示error占位符我們可以通過error狀態(tài)去控制,但是加載備選圖片的功能還沒有完成。

主要思路如下:

  1. 將入?yún)?code style="margin-right: 2px;margin-left: 2px;padding: 3px 5px;max-width: 100%;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;line-height: 1.5;font-size: 14.4px;border-radius: 2px;box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgba(255, 229, 100, 0.2) !important;">src改為srcList,值為圖片url或圖片(含備選圖片)的url數(shù)組;
  2. 從第一張開始加載,若失敗則加載第二張,直到某一張成功或全部失敗,流程結(jié)束。類似于 tapable[4] 的AsyncSeriesBailHook

對(duì)入?yún)⑦M(jìn)行處理:

const removeBlankArrayElements = (a: string[]) => a.filter((x) => x);

const stringToArray = (x: string | string[]) => (Array.isArray(x) ? x : [x]);

function useImage({ srcList }: { srcList: string | string[] }): {
  src: string | undefined,
  loading: boolean,
  error: any,
} {
  // 獲取url數(shù)組
  const sourceList = removeBlankArrayElements(stringToArray(srcList));
  // 獲取用于緩存的鍵名
  const sourceKey = sourceList.join("");
}

接下來就是重要的加載流程啦,定義promiseFind方法,用于完成以上加載圖片的邏輯。

/**
 * 注意 此處將imgPromise作為參數(shù)傳入,而沒有直接使用imgPromise
 * 主要是為了擴(kuò)展性
 * 后面會(huì)將imgPromise方法作為一個(gè)參數(shù)由使用者傳入,使得使用者加載圖片的操作空間更大
 * 當(dāng)然若使用者不傳該參數(shù),就是用默認(rèn)的imgPromise方法
 */

function promiseFind(
  sourceList: string[],
  imgPromise: (src: string
) => Promise<void>
): Promise<string
{
  let done = false;
  // 重新使用Promise包一層
  return new Promise((resolve, reject) => {
    const queueNext = (src: string) => {
      return imgPromise(src).then(() => {
        done = true;
        // 加載成功 resolve
        resolve(src);
      });
    };

    const firstPromise = queueNext(sourceList.shift() || "");

    // 生成一條promise鏈[隊(duì)列],每一個(gè)promise都跟著catch方法處理當(dāng)前promise的失敗
    // 從而繼續(xù)下一個(gè)promise的處理
    sourceList
      .reduce((p, src) => {
        // 如果加載失敗 繼續(xù)加載
        return p.catch(() => {
          if (!done) return queueNext(src);
          return;
        });
      }, firstPromise)
      // 全都掛了 reject
      .catch(reject);
  });
}

再來改動(dòng)useImage。

const cache: {
-  [key: string]: Promise<void>;
+  [key: string]: Promise<string>;
} = {};

function useImage({
-  src,
+  srcList,
}: {
- src: string;
+ srcList: string | string[];
}): { src: string | undefined; loading: boolean; error: any } {
  const [loading, setLoading] = React.useState(true);
  const [error, setError] = React.useState(null);
  const [value, setValue] = React.useState<string | undefined>(undefined);

// 圖片鏈接數(shù)組
+ const sourceList = removeBlankArrayElements(stringToArray(srcList));
// cache唯一鍵名
+ const sourceKey = sourceList.join('');

  React.useEffect(() => {
-   if (!cache[src]) {
-     cache[src] = imgPromise(src);
-   }

+   if (!cache[sourceKey]) {
+     cache[sourceKey] = promiseFind(sourceList, imgPromise);
+   }

-    cache[src]
-    .then(() => {
+    cache[sourceKey]
+     .then((src) => {
        setLoading(false);
        setValue(src);
      })
      .catch(error => {
        setLoading(false);
        setError(error);
      });
  }, [src]);

  return { isLoading: loading, src: value, error: error };
}

需要注意的一點(diǎn):現(xiàn)在傳入的圖片鏈接可能不是單個(gè)src,最終設(shè)置的valuepromiseFind找到的src,所以 cache 類型定義也有變化。

react-image-1

自定義 imgPromise

前面提到過,加載圖片過程中,使用方可能會(huì)插入自己的邏輯,所以將 imgPromise 方法作為可選參數(shù)loadImg傳入,若使用者想自定義加載方法,可傳入該參數(shù)。

function useImage({
+ loadImg = imgPromise,
  srcList,
}: {
+ loadImg?: (src: string) => Promise<void>;
  srcList: string | string[];
}): { src: string | undefined; loading: boolean; error: any } {
  const [loading, setLoading] = React.useState(true);
  const [error, setError] = React.useState(null);
  const [value, setValue] = React.useState<string | undefined>(undefined);

  const sourceList = removeBlankArrayElements(stringToArray(srcList));
  const sourceKey = sourceList.join('');

  React.useEffect(() => {
    if (!cache[sourceKey]) {
-     cache[sourceKey] = promiseFind(sourceList, imgPromise);
+     cache[sourceKey] = promiseFind(sourceList, loadImg);
    }

    cache[sourceKey]
      .then(src => {
        setLoading(false);
        setValue(src);
      })
      .catch(error => {
        setLoading(false);
        setError(error);
      });
  }, [sourceKey]);

  return { loading: loading, src: value, error: error };
}

實(shí)現(xiàn) Img 組件

完成useImage后,我們就可以基于其實(shí)現(xiàn) Img 組件了。

預(yù)先定義好相關(guān) API:

屬性 說明 類型 默認(rèn)值 src 圖片鏈接 string / string[] - loader 可選,加載過程占位元素 ReactNode null unloader 可選,加載失敗占位元素 ReactNode null loadImg 可選,圖片加載方法,返回一個(gè) Promise (src:string)=>Promise imgPromise 當(dāng)然,除了以上 API,還有<img />標(biāo)簽原生屬性。編寫類型聲明文件如下:

export type ImgProps = Omit<
  React.DetailedHTMLProps<
    React.ImgHTMLAttributes<HTMLImageElement>,
    HTMLImageElement
  >,
  "src"
> &
  Omit<useImageParams, "srcList"> & {
    src: useImageParams["srcList"];
    loader?: JSX.Element | null;
    unloader?: JSX.Element | null;
  };

實(shí)現(xiàn)如下:

export default ({
  src: srcList,
  loadImg,
  loader = null,
  unloader = null,
  ...imgProps
}: ImgProps) => {
  const { src, loading, error } = useImage({
    srcList,
    loadImg,
  });

  if (src) return <img src={src} {...imgProps} />;
  if (loading) return loader;
  if (error) return unloader;

  return null;
};

測(cè)試效果如下:

react-image-2

結(jié)語

值得注意的是,本文遵循 react-image 大體思路,但部分內(nèi)容暫未實(shí)現(xiàn)(所以代碼可讀性要好一點(diǎn))。其它特性,如:

  1. 支持 Suspense 形式調(diào)用;
  2. 默認(rèn)在渲染圖片前會(huì)進(jìn)行 decode,避免頁面卡頓或者閃爍。

有興趣的同學(xué)可以看看下面這些文章:

  • 用于數(shù)據(jù)獲取的 Suspense(試驗(yàn)階段)[5]
  • 錯(cuò)誤邊界(Error Boundaries)[6]
  • React:Suspense 的實(shí)現(xiàn)與探討[7]
  • HTMLImageElement.decode()[8]
  • Chrome 圖片解碼與 Image.decode API[9]


參考資料

[1]

react-image: https://github.com/mbrevda/react-image

[2]

? 倉庫傳送門: https://github.com/worldzhao/build-your-own-react-image

[3]

react-use: https://github.com/streamich/react-use

[4]

tapable: https://github.com/webpack/tapable

[5]

用于數(shù)據(jù)獲取的 Suspense(試驗(yàn)階段): https://zh-hans.reactjs.org/docs/concurrent-mode-suspense.html

[6]

錯(cuò)誤邊界(Error Boundaries): https://zh-hans.reactjs.org/docs/error-boundaries.html#introducing-error-boundaries

[7]

React:Suspense 的實(shí)現(xiàn)與探討: https://zhuanlan.zhihu.com/p/34210780

[8]

HTMLImageElement.decode(): https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLImageElement/decode

[9]

Chrome 圖片解碼與 Image.decode API: https://zhuanlan.zhihu.com/p/43991630

The End

歡迎自薦投稿到《前端技術(shù)江湖》,如果你覺得這篇內(nèi)容對(duì)你挺有啟發(fā),記得點(diǎn)個(gè) 「在看」


點(diǎn)個(gè)『在看』支持下 

瀏覽 35
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美日韩日逼视频| 一区二区三区无码免费| 影音先锋男人网| 亚洲avwww| 婷婷五月天影院| 国产二区三区| 国产丝袜av| 欧美日韩黄色极品| 欧美黄色网视频| 黄色福利视频| 国产三级电影在线观看| 一级黄色录像带| 美女网站黄色| 亚洲免费av在线| 精品无码一区二区三区四区久久久软件 | 38t6电影网logo高清图片 | 51亚洲精品| 高清免费无码| 青青草视频在线免费观看| 午夜AAA| 亚洲一区二区成人| 欧美在线A片| 曰本精品综合网在线| 俺去俺来也www色视频| 一道本无码在线| 91精片| 亚洲色图欧美| 亚洲天堂在线观看视频网站| 在线免费看AV片| 欧美久久久| 大香蕉官网| 亚洲黄片大全| 鸡巴操骚逼视频| 中国操逼电影| 国产免费激情视频| 欧美操B电影| 麻豆乱码国产一区二区三区| 亚洲综合视频在线观看| 欧美日韩毛片| BBB搡BBB搡BBB搡BBB| 久久午夜成人电影| 欧美一级A片免费看| 欧美BBWBBWBBWBBWBBwBBW | 波多野结衣vs黑人巨大| 在线观看视频一区| 成人精品免费视频| 99久久99九九99九九九| 丰满人妻一区二区| 西西444WWW无码大胆知乎| 靠逼网站免费观看| 国产无码做爱视频| 天天操天天射天天爽| 翔田千里与黑人50分钟| 黄色大片网站| 91av电影| www.黄色在线观看| 久久午夜无码鲁丝片午夜精| 国产成人在线免费| 国产成人无码AⅤ片免费播放| 精品无码一区二区三区蜜桃李宗瑞| 国产精品女人777777| 国产一级A片免费看| www.五月天婷婷| 日韩欧美视频| 五月天操逼| av不卡在线| 六月丁香网| 久久久久久综合| 人人看人人搂人人摸| 日本一区二区视频在线| 美女国产精品| 国产69视频在线观看| 欧美激情中文字幕| 黄色片视频日本| 婷婷开心五月天| 懂色成人视频在线观看| 淫荡少妇美红久久久久久久久久| 男女操逼网站| 豆花成人在线| 日韩无码久久久| 亚洲精品在线视频| 九九国产精品| 成人国产AV| 日韩操逼网站| 欧美一级特黄A片免费| 日韩精品人妻中文字幕第4区| 麻豆一区在线观看| 免费无码一级A片大黄在线观看 | 日韩精品三区| 91黄色片| 亚洲国产成人精品女人| 久久久黄片| www.狠狠| 黄色动态视频| 久久水蜜桃| 高清无码视频在线免费观看| 一区二区三区高清| 操操日| 肏屄视频在线| 久久91欧美特黄A片| 午夜福利在线视频| 黄色三级毛片| 成人看片黄a免费看视频| 青娱乐AV在线| AAA三级片| 色综合综合色| 大荫蒂hd大荫蒂视频| 另类老妇奶BBBBwBB| 偷拍欧美日韩| 熊猫成人网| Chinese搡老女人| 欧美高清视频| 色天使亚洲| 亚洲无码精品一区二区| 在线亚洲观看| 久草视频福利| 荫蒂添出高潮A片视频| 麻豆人妻换人妻好紧| 亚洲一区在线播放| 搡BBBB搡BBB搡五十| 亚洲黄片免费观看| 色五月丁香婷婷| 日本三级片在线| 爱搞搞就要搞| 亚洲香蕉视频| AV性爱社区| 18禁二区| 久久草草热国产精| 久久久精品无码| 中日韩精品A片中文字幕| 黃色毛片A片AAAA级20| 无码中文综合成熟精品AV电影| 日韩av无码中文字幕| 91青青视频| 97免费在线观看视频| 逼逼AV| 国产激情一区二区三区| 成人无码国产| 国产香蕉av| 一级黄色录像带| 亚洲无码成人在线观看| 大香蕉伊人影院| 亚洲高清在线观看视频| 懂色aV| 免费观看毛片| 漂亮人妻吃鸡啪啪哥哥真的好| 女人的天堂AAA| 热无码av| jizz日本护士| 久久精品视频免费看| 九色91PORNY国产| 免费黄色福利视频| 久久久久久久久久成人永久免费视频 | 亚洲在线观看免费| 成人一区在线观看| 欧美日韩成人一区二区三区| 国产精品福利小视频| 色呦呦一区二区三区| 91九色在线观看| 大黑鸡巴视频| 国产精品久久久久久久久久久久| AⅤ中文字幕在线免费观看| 老女人操逼网| 欧美日韩免费在线视频| 操逼短视频| 无码成人在线| 黄片免费看网站| 爱爱爱免费视频| 国产毛片一区二区三区| 欧美视频免费| 色天使青青草| 茄子av| 夜夜撸一撸| 四川少妇搡bbw搡bbbb| 西西人体44www大胆无码| 欧美一级精品| 久久精品9| 无码一区在线观看| 91视频在线| 做爱视频毛片人乱| 免费爱爱视频网站| 中文久久久| 亚洲精品秘一区二区三小| 人人妻人人操人人| 成人精品久久久| 97超碰免费| 伊人三区| 波多野结衣视频在线观看| a片在线免费播放| 丁香五月亚洲| 天天综合干| 亚洲欧美在线观看视频| 国产拍拍拍| 国产美女一级特黄大片| 豆花视频在线播放| 婷婷五月色综合| 日韩精品人妻无码| 国产av中文字幕| 五月av| 第四色网站| 操逼去| 色悠悠久久综合| 99高清无码| 成人区精品一区二区婷婷| 成人免费黄片| 狠狠操狠狠色| 中文字幕精品视频在线| 欧美午夜精品久久久久久3D| 97在线国产| 午夜精品秘一区二区三区| 免费v片在线| 国产在线接入| 色操网| 国产不卡一区| 男人的天堂在线视频| 亚州精品国产精品乱码不99勇敢| 成人性爱视频免费在线观看| 久久91精品| 91麻豆精品91久久久ios版| 麻豆国产视频| 青青草无码在线视频| 亚洲成人在线视频免费观看 | 人人摸人人草| 欧美日韩岛国| 九九九AV| 欧美天堂在线观看| 欧美性爱网址| 日韩三级片网址| 欧美熟妇搡BBBB搡BBBBB| 大茄子熟女AV导航| 国产中文字幕在线播放| 先锋影音一区二区三区| 美女高潮网站| 熟妇女人妻丰满少妇中文字幕| 蜜桃av色偷偷av老熟女| 国产黄色视频在线观看| 国产精品无| 成人爽爽视频| 亚洲国产精品久久人人爱| 亚洲免费无码| 色国产视频| 欧美日韩中文在线| 无码中文字幕网站| 久久久久亚洲AV成人片| 国产成人精品免高潮在线观看| 五月色丁香| 中文字幕在线资源| 黄色成人视频网站| 激情五月婷婷综合| 北京熟妇槡BBBB槡BBBB| 国产亚洲AV| 星空AV| 亚州免费视频| 久久婷五月| 欧美日韩逼| 一区无码高清| 日韩欧美视频一区| 亚洲成人黄色电影| 国产wwwww| 欧美日韩高清一区二区三区| 日韩人妻无码一区二区| 99大香蕉视频| 一个人看的www日本高清视频| 婷婷九九| 九九免费视频| 自拍三级| 不卡的av在线| 综合+++夜夜| 波多野结衣福利视频| 99久久婷婷国产综合精品漫| 婷婷五月在线视频| 操逼网视频| 无码区一区二区| 欧美人妻视频| 少妇无码一区| 亚洲天堂影音先锋| 一级大片| 国产无码在线影院| 日韩中文字幕av在线| 青青草亚洲| 国产欧美在线综合| 91精品婷婷国产综合久久蝌蚪 | 97无码视频| 亚洲无码一区二区三| 欧美毛片在线观看| 无码-ThePorn| 无码欧美精品一区二区| 日韩大屌| 成人免费黄片| 久草在在线| 久久久久久高清毛片一级| 久久一区| 青青草原国产视频| 国产精品成人无码a无码| 日本伊人在线综合视频| 黄片高清无码在线观看| 成人在线精品视频| 毛片av在线| 91视频你懂的| 影音先锋aV成人无码电影| 色婷婷欧美在线播放内射| 91国产在线播放| 日韩av在线免费观看| 国产精品伊人| 51精品国产| gogogo高清在线观看免费直播中国| 探花一区二区| 在线免费A片| 久久无码成人| 国产内射精品| 亚洲天堂久久| 日韩在线国产| 免费的毛片| 五月激情婷婷基地| 综合激情网站| 水果派AV解说| 日韩在线国产| 99自拍| 三级黄片免费看| 国产AV中文| 9久热| 中文字幕AV网| 色色热| 91久久久久久久久久久| 国产乱子伦-区二区三区四区| 91福利网| 九一亚洲精品| 亚洲AV成人无码精在线| 一道本无码视频| 亚洲日韩影院| 超碰在线网| 日韩大片在线观看| 欧美日韩狠狠操在线观看视频| 国产亚洲欧美视频| 免费a网站| 中文字幕丰满的翔田千里| 777Av| 久久人人网| 天天操电影| 国产亚洲久一区二区写真| 亚洲成人在线观看视频| 天天操网站| 一级调教看片| 成年视频网站| 黄片免费大全| 另类视频在线| 日韩电影一区| 日韩一级内射| 日韩一级黄| 三级片AV在线| 91成人免费电影| 欧美色图网站| 97精品人妻一区二区三区香蕉 | 天堂va欧美va亚洲va在线| 日本大胆中出| 亚洲成人免费观看| 久久久久久久香蕉视频| 超碰福利在线| 婷婷国产成人精品| 亚洲三级黄色视频| 亚洲理论在线| 91青青草视频| 91成人免费在线观看| 婷婷久久久久| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇| 人成在线免费视频| 国语偷拍| 黄色大片在线免费观看| 国产一级AV免费观看| 91蜜臀| 免看一级a毛片一片成人不卡| 国产操逼片| 男女操逼视频网站| youjizzcom日本| 三级国产AV| 天天日天天日天天日| 成人AV影院| 欧美熟女一区| 亲子乱AⅤ一区二区三区| 狠狠干亚洲视频| AV一区二区在线观看| 91视频青青草| 妻子互换被高潮了三次| 欧美色精品| 国产AⅤ| 免费高清无码| 亚洲日韩在线播放| 日本一级大片| 亚洲AV无码一区毛片AV| 久久久久黄色| 亚洲精品久久久久久久蜜桃| 一区二区三区毛片| 亚洲伊人大香蕉| 丹麦电影《下午》| 九色自拍视频| 激情婷婷色五月| 国产成人精品三级麻豆| 色欲精品| 久久久成人电影| 97亚洲精品| 黄色18禁| 亚洲色欧美| 精品丰满人妻一区二区三区免费观| 成人免费在线视频| 国产嫩苞又嫩又紧AV在线| 免费无码| 亚洲人妻无码在线| 高潮国产| 亚洲综合网站| 一本久久精品一区二区| 好逼123| 99免费精品视频| 久草欧美| 午夜撸一撸| 99这里有精品| 人人摸人人摸人人| 99国产在线视频| 欧美在线色| 秋霞日韩| 国产永久免费| 在线亚洲AV| 懂色av粉嫩AV蜜臀AV| 青草综合| 日本草逼网| 99国产精品| 高h网站| 西西4444www大胆无吗| 第一福利视频| 夜夜撸日日| 青草五月天| 国产精品观看| 亚洲熟女一区二区| 高清欧美日韩第一摸| 91草视频| 爱爱视频天天操| 六月婷| 91久久精品一区二区三| 久久久久亚洲AV无码成人片| 国产视频导航| 大香蕉男人天堂| 亚洲激情欧美激情| av麻豆| 日韩精品一区二区在线观看| 日韩国产成人在线| 五月天婷婷激情| 国产精品揄拍500视频| 特级黄色A片| 三级片在线看| 亚洲天堂精品视频| 日韩欧美国产一区二区| 无码一区二区三| 午夜乱论| 99热官方网站| 日本一级一片免费视频| 亚洲无码成人片| 日韩av免费在线| 日韩国产欧美精品一区| 99精品久久久久久无码| 国产乱╳╳AⅤ毛片| 久久久精品影院| 成人AAA片| 三p视频| 丁香花在线小说免费阅读| 国产精品久久久精品| 亚洲精选一区二区三区| 亚洲欧美成人| 中文字幕AV在线播放| 淫色五月| 日韩av免费在线| 欧美人妻视频在线| 日本A∨| 九九精品在线视频| 国产午夜福利视频在线观看| 尤物av| 奇米狠狠操| 成人影视在线免费观看| 黄色3A片在线观看| 日韩免费毛片| 欧美AA视频| 免费av播放| 超级碰碰碰碰碰碰碰碰碰| 亚洲无码一二三区| A片大香蕉| www.av在线播放| 国产精品自拍视频| 国产操操操| 亚洲成人av无码| 大香蕉伊人免费| 无码视频在线免费观看| 日韩AV中文字幕在线| 国产高清a| www.99免费视频| 无码人妻一区二区三区| 性欧美69| 又黄又色的视频| 黄色爱爱| 亚洲操| 青草精品| 婷婷五月国产| 国产日韩91| 中文字幕观看| 日韩草逼| 亚洲A片V一区二区三区| 国产精品美女久久久久久久久 | 校园春色亚洲色图| 老太奶性BBwBBw侧所| 亚洲一级av| 一本一道伊人99久久综| 黄色大片在线| 亚洲砖区| 亚洲免费在线视频| 高清无码在线观看18| 日本中文字幕免费| 一级AAAAA片裸体做受| 看毛片视频| 亚洲天堂成人| 日韩精品视频一区二区| 男人天堂新地址| 精品狼友| 大香蕉免费中文| 成人一级A片| 日韩精品成人无码免费| 亚洲中文字幕2019| 日本草逼网| 国产精品视频一区二区三区在线观看| 东京热高清无码| 淫淫五月天| 人人摸人人操人人射| 人人妻人人爱人人| 国产又黄又大又粗| 中字无码| 51成人网| 日批视频在线观看| 成年人黄色视频网站| 中文资源在线√8| 健身房被教练3p喷水了| 天天干天天添| 日本成人精品| 亚洲成色A片77777在线小说| 美女裸身18禁| 特一级黄A片| 无码东京热国产| 清清草视频| 一二区无码| 四虎AV在线| 91天天看| 国产精品伦子伦免费视频| AV无码精品| www.三级| 亚洲中文字幕码mv| 中文字幕免费高清网站| 日日搔av一区二区三区| 日本草逼网| 日韩中文无码一级A片| 国产三级在线| 国产亚洲久一区二区^_^| 亚洲无码视频在线看| 精品无码三级在线观看视频| 亚洲天堂在线观看免费视频| 大香蕉综合伊人| 婷婷五月999| 狠狠干| 婷婷五月天社区| 黄色美女网站| 国产一级二级视频| 国产99久久久| 五月丁香综合在线| 亚洲精品乱码在线| 亚洲丁香五月激情| 一道本在线| 成人日韩无码| 成人爽a毛片一区二区免费| 91无码人妻一区二区成人AⅤ| 欧美性猛交XXXX乱大交HD| 爱爱爱网址| 亚洲黄色av网站| 亚州一级成人片| 黄色三级网站| 麻豆久久久| 日逼大片| 99在线观看精品视频| 精品国产成人a在线观看| 天天干天天射天天爽| 最近中文字幕无码| 最新中文字幕无码| 亚洲一级婬片A片AAAA网址| 国产性交网站| 麻豆成人91精品二区三区| 九九热精品在线视频| 欧美日韩在线免费| 一本色道久久综合狠狠躁的推荐 | 无码福利视频| 俺来也听听婷婷| 国产亚洲精品久久久波多野结衣 | 91无码秘蜜桃一区二区三区-百度| 97精品人妻一区二区| www.午夜福利| 午夜福利av电影| 亚洲性爱一区二区三区| 91人妻人人澡人人爽人人精吕| 色玖玖| 亚洲高清视频在线观看| 亚洲无码福利| 伊人久久大香线蕉av一区| 一二区无码| 国产成人a亚洲精品无码| 日韩成人区| 三级片免费网址| 夜夜骚av.一区二区三区四区| 国产一级婬乱A片| 女邻居的B好大| 91老熟| 俺也色俺也干| 国产午夜精品视频| 91在线无码精品秘网站| 亚洲免费在线婷婷| 黄片网址| 一区二区三区欧美| 51福利视频| 性爱视频网址| 国产黄色网| 91视频一区二区三区| AV天堂亚洲| 人妻无码一区二区三区摄像头| 午夜成人小电影| 国产一级a毛一级a毛观看视频网站| 久久免费国产视频| 北条麻妃av在线播放| 婷婷国产在线| 亚洲综合精品| 亚洲精品一二三| 三级AV网站| 蝌蚪窝免费视频| 日中文字幕| 久久怡春院| 欧美精产国品一二三区别| 东京热久久综合| 97国产精品手机| 国产熟睡乱子伦午夜视频_第1集 | 2015中文字幕黄色视频| 中国老太卖婬HD播放| 日韩在线| 国产操逼网站| 在线免费观看黄色视频| 日韩精品| 怡红影院美乳| 91大神在线免费看| 操逼逼一区二区三区| 国产欧美一区二区人妻喷水| 九鼎联盟骗子| 国产剧情一区二区av在线观看 | 就操| 日韩免费福利视频| 伊人春色网| 免费观看久久久| 在线成人小视频| www.色在线观看| 中文字幕高清无码在线播放| 国产精品无码久久久久成人app| 肏逼视频免费看| 欧美日本一区二区三区| 青娱乐国产精品| 天天综合网久久| 特一级黄A片| 中文色片| 亚洲午夜福利视频在线观看| 中国a一片一级一片| 少妇搡BBBB搡BBB搡小说 | 91麻豆国产福利在线观看| 无码一区二区区| 日本中文字幕在线观看视频| 男人的天堂aa| 欧美群交videotv群交| 中文字幕一区二区三区在线观看 | 在线免费观看AV片| 一本色道久久综合亚洲精品久久| 国产精品AV在线| 黄色三级在线观看| 麻豆精品| 无码网址| 国产十欧洲十美国+亚洲一二三区在线午夜 | 中文字幕观看av| 国产色婷婷一区二区| 无码人妻丰满熟妇区毛片蜜桃麻豆| 国产99999| 超碰8| 亚洲AV无码乱码国产| 婷婷五月天啪啪| а中文在线天堂精品| 成人AV三级片| 日批网站视频| 中文字幕11页| 中文字幕在线不卡| 中文字幕在线资源| 一级AA片| 黑人粗暴偷拍一区二区| 人妻无码91| 免费A级| 韩国无码中文| 亚洲人免费视频| 欧美日韩中文字幕在线视频| 草草国产| 丁香婷婷视频| 91精品国自产在线观看| 日韩无码一级| 亚洲不卡视频| 搡BBBB搡BBB搡五十粉嫩| 亚洲国产成人精品激情在线| 亚洲色伦| 亚洲秘无码一区二区三区电影| 色婷婷av在线| 99性爱| 北条麻妃无码播放| 国产免费成人视频| 高清一区二区三区| 高清色色女网站| 中文字幕日韩无码片| 凸凹翔田千里无码| 91无码一区二区三区| 久久久免费观看视频| 亚州高清无码视频| 日本在线小视频| 国产怡红院| 免费v片| 国产精品乱码毛片在线人与| 亚洲欧美日韩不卡| 久久免费视频网站| 久草视频福利在线| 久久蝌蚪窝| 久草加勒比| 人人爱人人插| 草久美女| 亚洲人做受| 天天射天天日天天干| 91干干| 色中色在线视频| 91女人18毛片水多的意思| 青娱乐亚洲领先| 五月天激情爱爱| 五月丁香视频在线| 国产天堂在线观看| AV福利在线观看| caopor在线| 日本无码在线播放| 国产天堂| 老太奶性BBwBBw侧所| 91国内精品| 日韩综合在线观看| 欧美日一区二区三区| 猫咪AV成人永久网站| 日韩一级黄色电影| 欧美在线观看网站18| 成人丁香五月天| 熟妇一区二区| 欧美三级毛片| 日本一区二区在线| 一本大道香蕉av久久精东影业 | 亚洲色婷婷久久精品AV蜜桃| 福利在线看| 日韩无码高清一区| 亚洲最大无码| 国产1区| 久久成人A片| 欧美一区二区三区四| 一级黄色免费片| 人人澡人人澡人人| 爱爱一区| 四川美女网久草| 日韩欧美黄色片| 最新毛片网站| 日本三级韩三级99久久| 国产精品一二区| 欧美国产日韩综合在线观看170| 一区二区三区三级片| 蜜桃Av噜噜一区二区三区四区 | 午夜啪啪视频| 亚洲视频中文字幕| 成人久久久| 国产精品国产三级片| 日日舔| 欧美A片在线| 91精品丝袜久久久久久久久久粉嫩 | 精品人妻一区二区三区日产| 亚洲香蕉av| 日韩欧美91| 成人午夜福利视频| 欧美视频免费在线观看| 丁香六月婷婷久久综合| 天天搞搞| 亚洲成人777| 爆操熟女| 日韩黄色毛片| 欧美偷拍一区二区| 豆花视频免费| 熟睡侵犯の奶水授乳在线| 国产无码高清视频| 狼人伊人综合| 日韩欧美91| 再深点好爽灬轻点久久国产| 亚洲日韩第一页| youjizzcom日本| 91av在线电影| 日韩精品在线观看免费| 国产又大又粗又长| MAD033_后宫秘密陶子.| 东京热av一区二区| 亚洲九区| 九色精品| 综合影院| 国产av日韩av| 操少妇逼| 久久黄色视频网站| 成人无码小电影| 欧美小黄片| 91人妻人人人人爽| 伊人成人在线视频| 嫩BBB槡BBBB槡BBBB| 成人aV无码精品国产一区二区| 日韩精品视频在线免费观看 | 国精品无码一区二区三区在线秋菊 | 长腿女神打扫偷懒被主人猛操惩罚| 国产日逼片| 久久久久亚洲AV无码麻豆| 国产一区免费| 国产精品三级在线| 黄在线免费观看| 最新AV在线| 新亚洲天堂男子Av-| 天天日天天日天天操| 水果派中文解说AⅤ| 国产无码久久| 国产一级性爱视频| 黄色内射视频| 亚洲自拍电影| 懂色成人Av| 免费在线观看Av| 黄色A片免费看| 国产精品自拍视频| 亚洲天堂电影网| 无码在线观看免费视频| 黄片视频免费在线观看| 中文字幕网站在线观看| 国产精品高| 国产三级片在线视频| 久久丁香五月天| 日韩欧美一区在线| 亚洲精品一区二区三| 大香蕉av一区二区三区在线观看 | 水蜜桃视频在线观看| 三级片网页| 国产视频1区| 超碰日韩| 操美女的逼| 黄片无遮挡| 91探花足浴店少妇在线| 在线免费观看国产视频| 成人中文字幕在线观看| 五月综合激情| 丁香六月婷婷激情| 国产无码黄片| 日本无码中文字幕| 一区二区中文| 国产网址| 嫩BBB嫩BBB嫩BBB| 国产操逼图片| 可以免费观看的av| 国产一区二区精品| 欧美色图狠狠干| 中文字幕成人视频| 青青草原av| 精品久热| 成人亚洲电影| 98在线++传媒麻豆的视频| 五月丁香欧美综合| 毛片在线观看网站| 11孩岁女精品A片BBB| 欧美日韩亚洲一区二区| 在线视频一区二区三区| 成人性在线| 欧美日韩免费在线| 国产激情视频在线观看| 欧美日韩国产成人在线观看| 丁香色五月婷婷| 黄色视频| 久久视频在线| V天堂在线| 亚洲美女网站在线观看| 欧美日韩亚洲综合| 亚洲久操| 91成全在线| 青青青草视频在线观看| 国产黄色在线观看| 天天干91| 17c精品麻豆一区二区免费| 午夜AV免费| 人人妻人人玩人人澡人人爽| 亚洲操逼图| 黄色三级A片| 成人视频无码| 久草视频在线免费|