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

useState 真的那么簡單嗎?我在項目里踩過的坑

開發 前端
每一個"原來是這樣"的時刻,都是在項目里被 bug 追著跑的時候學到的。所以如果你現在寫的代碼不夠完美,項目里還有各種 setState 的問題,這很正常。關鍵是要去理解——為什么會這樣?為什么 React 要異步更新?為什么不能直接改對象?

我敢打賭,你一定遇到過這種情況:

某天下午,同事在群里問:"咋回事啊,用戶點了按鈕,狀態改了,但列表沒更新啊?"

你開始調試,F12 打開,state 里的數據明明改了,UI 就是沒反應。折騰半小時,最后發現——是直接改了數組,沒有創建新對象。

或者這樣:你看到前輩寫的代碼里,useState 十來個,各種奇怪的副作用代碼到處都是,改一個字段牽一發動全身。最后索性不敢動,怕出bug。

我也是這樣過來的。慢慢才明白,useState 看似簡單,但很多人用了好幾年也沒真正吃透。

我剛工作時的懵逼時刻

那時候我對 useState 的理解就是:"就是個變量唄,用 setCount 改改值。"

const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count);  // 我以為會是 1
}

結果呢?還是 0。

我就很納悶啊,為什么我改了還是 0?我甚至問過 ChatGPT(那時候還沒有,我查的文檔)。文檔里說"狀態更新是異步的",我當時理解得一知半解——"異步","什么鬼?為什么要異步?"

后來在大佬的指點下才明白:

React 不是你改了就立刻生效的。 你調用 setCount 時,你只是告訴 React:"嘿,請幫我把這個事兒加到待辦清單里。" React 會合并你的所有更新,一起處理,然后才重新渲染頁面。

當前這一幀里,count 的值是凍住的。你讀不到新值。只有下一幀重新渲染時,你才能看到新的 count

想象一下,你在銀行存錢。你告訴柜員:"我要存 100 塊。" 柜員記錄下來,然后排隊處理了你和其他 10 個人的請求,一起更新系統。你不能指望她立刻告訴你新余額——還得等系統更新完。

setState 之后立刻讀值?真正的坑來了

我第一次被這個坑害慘了。那是一個下午,做一個秒殺活動的功能:

function handleBuy() {
  // 用戶點擊"立即下單"
  setCount(count - 1);
  
  // 我以為這里 count 已經改了
  if (count <= 0) {
    // 庫存不足,彈窗提示
    alert('已售罄');
  }
}

結果呢?用戶一直能點"下單",count 怎么都減不完。

因為每次我判斷的 count,都是上一幀的值。我在 setState 之后立刻判斷,用的還是舊的 count

后來在測試提bug的時候才發現——這和我們的庫存系統不一致!

我學到的第一課:不要試圖在 setState 之后立刻用新值。把你的邏輯分開。如果你需要根據新狀態做什么事,放到下一個組件渲染周期里,或者用 useEffect

// 正確的做法
function handleBuy() {
const newCount = count - 1;
  setCount(newCount);

// 不在這里判斷,而是在組件渲染時判斷
}

// 或者用 useEffect 監聽
useEffect(() => {
if (count <= 0) {
    alert('已售罄');
  }
}, [count]);

多次 setState,為什么只有最后一個生效?

我還遇到過更尷尬的事兒。

我們的活動頁面有個禮券碼兌換的功能。用戶輸入一個優惠碼,我需要做三件事:

  1. 驗證碼的有效性
  2. 獲取折扣信息
  3. 更新用戶的優惠券列表

我一開始這樣寫的:

function redeemCoupon(code) {
  setIsPending(true);
  setError(null);
  setDiscount(null);

// 驗證并獲取
const result = await validateCoupon(code);

if (result.success) {
    setCoupons(result.coupons);  // 更新券列表
    setDiscount(result.discount);  // 設置折扣
  } else {
    setError(result.message);  // 設置錯誤
  }

  setIsPending(false);
}

這看起來沒問題,但實際場景更復雜。后來我們發現,如果用戶快速操作(網絡稍微慢一點),前面的狀態會被后面的覆蓋。

我就很郁悶啊,明明設置了啊,為什么沒有?

真相是:我多次調用 setXxx,React 會合并這些更新。但每次都用的是同一個快照的舊值

比如說,我有個遞增的需求:

function increment() {
  setCount(count + 1);
  setCount(count + 1);
  setCount(count + 1);
}

結果只加了 1,不是 3。因為三行代碼用的都是同一個 count 值。相當于:

setCount(5 + 1);   // 6
setCount(5 + 1);   // 還是 6
setCount(5 + 1);   // 還是 6,最后取最后一個

后來我的前輩教我用函數式更新

function increment() {
  setCount(c => c + 1);  // React 給我最新的值
  setCount(c => c + 1);  // React 再給我新的值
  setCount(c => c + 1);  // React 再給我新的值
}

這樣每次 React 都會把最新的值傳給我,我這樣操作就行了:

setCount(c => c + 1);

這個單獨一行,看似簡單,但威力巨大。

從"列表管理"學到的狀態分組智慧

我們有個后臺系統,要管理一個用戶列表。一開始我就這樣做:

const [users, setUsers] = useState([]);
const [totalCount, setTotalCount] = useState(0);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
const [currentPage, setCurrentPage] = useState(1);

五個 state,感覺很"完善"。

但問題來了。有一次,我在刪除用戶的時候,更新了 users 列表,但忘了更新 totalCount。結果用戶界面顯示的總數和實際列表數不符。

我坐在那里狂敲代碼調試,最后發現——我在三個地方都需要同步這兩個值。改一個忘一個。

后來我看到老大哥怎么做的,才恍然大悟:

// 按照"更新頻率"和"相關性"分組
const [listData, setListData] = useState({
users: [],
totalCount: 0
});

const [pagination, setPagination] = useState({
currentPage: 1,
pageSize: 10
});

const [uiState, setUiState] = useState({
isLoading: false,
error: null
});

這樣分組的好處是:

  • listData 總是一起更新,你不會忘記同步 users 和 totalCount
  • pagination 獨立變化,改頁碼時不會影響其他
  • uiState 是通用的加載態和錯誤態,可以復用

更新時就變得清晰了:

function fetchUsers() {
  setUiState({ isLoading: true, error: null });
  
  api.getUsers(pagination.currentPage).then(res => {
    setListData({
      users: res.data,
      totalCount: res.total
    });
    setUiState({ isLoading: false, error: null });
  }).catch(err => {
    setUiState({ isLoading: false, error: err.message });
  });
}

再也不會出現數據不一致的問題了。

那個"衍生數據"的坑,差點被我重復踩

有一次,我在做一個購物車頁面。用戶可以添加/刪除商品,我需要顯示:

  1. 購物車里的商品列表
  2. 購物車總價
  3. 商品數量

一開始我"聰明"地這樣做:

const [items, setItems] = useState([]);
const [totalPrice, setTotalPrice] = useState(0);
const [itemCount, setItemCount] = useState(0);

function addItem(product) {
const newItems = [...items, product];
  setItems(newItems);
  setTotalPrice(totalPrice + product.price);  // 我自己維護總價
  setItemCount(itemCount + 1);  // 我自己維護數量
}

function removeItem(productId) {
const removed = items.find(i => i.id === productId);
  setItems(items.filter(i => i.id !== productId));
  setTotalPrice(totalPrice - removed.price);
  setItemCount(itemCount - 1);
}

你能看出問題嗎?

我在三個不同的地方維護著三份"真相"。只要有任何一個地方出錯,整個購物車就亂套。

果然,后來有個 bug 出現了:用戶點擊"全選"之后,數量顯示和實際列表對不上。我排查了半天,發現是某個角落的代碼沒有正確更新 itemCount

那時候我才意識到——我根本不需要存這些值

后來我改成:

const [items, setItems] = useState([]);

// 這些都是計算出來的,不需要 state
const itemCount = items.length;
const totalPrice = items.reduce((sum, item) => sum + item.price, 0);

function addItem(product) {
  setItems([...items, product]);
// itemCount 和 totalPrice 會自動"更新"
}

function removeItem(productId) {
  setItems(items.filter(i => i.id !== productId));
// itemCount 和 totalPrice 會自動"更新"
}

這樣就再也不會出現同步問題了。因為根本沒有多個"真相源"。

那次異步 setState 教給我的

我們有一個"點贊"功能。用戶點點贊按鈕,我們要:

  1. 立刻改變 UI(點贊按鈕變亮)
  2. 同時發送請求給服務器

我最初是這樣寫的:

const [liked, setLiked] = useState(false);

function handleLike() {
  setLiked(!liked);
  
  // 發送請求
  api.addLike(postId).catch(err => {
    // 如果失敗,恢復狀態
    setLiked(liked);  // 這里有問題!
  });
}

看出來了嗎?我在 .catch() 里用的還是舊的 liked 值

假設用戶很快點了點贊,然后又點了取消。現在 liked 是 false。但如果第一個請求失敗了,我的 catch 回調會把它改回 true(用的是當時的舊快照)。結果用戶的操作就被反轉了。

這是個經典的閉包陷阱。

正確做法是用函數式更新:

function handleLike() {
  setLiked(prev => !prev);
  
  api.addLike(postId).catch(() => {
    setLiked(prev => !prev);  // 恢復前一個狀態
  });
}

這樣不管發生了什么,我都是基于"最新的狀態"來操作,不會出錯。

計算型初始值,一個看不見的性能漏洞

我們有個很復雜的儀表板。首次加載時,需要做一堆初始化:處理大量數據、生成圖表配置、諸如此類的。

我一開始這樣做:

const [config, setConfig] = useState(generateComplexConfig(rawData));

問題是:每次這個組件重新渲染,generateComplexConfig 都會被調用一遍。

雖然 React 最后不會真的用這個返回值(它只用第一次的),但 JavaScript 還是浪費了 CPU 去計算。在我們這個場景里,這個函數要跑兩秒鐘。組件每次重新渲染都要卡兩秒,那就離譜了。

后來老大哥教我一個技巧:

const [config, setConfig] = useState(() => generateComplexConfig(rawData));

只需要包裝成一個函數,React 就只會在初始化時調用它。之后重新渲染時,它就不會再調用這個函數了。

這叫"懶初始化"。看起來簡單,但對性能的影響能很顯著。

真正的高手知道什么時候不用 useState

我剛工作時,什么東西都想放在 state 里。結果組件到處都是 useState,到處都是 re-render,到處都是 useEffect 來同步各種奇怪的東西。

后來我才學會問自己一個問題:這個東西真的需要是 state 嗎?

比如說,我們有一個表單,用戶不斷地輸入。每輸入一個字符,我都在計算"還能輸入多少字符"。

// ? 我最初想這樣做
const [text, setText] = useState('');
const [remainingChars, setRemainingChars] = useState(100);

function handleChange(e) {
  const newText = e.target.value;
  setText(newText);
  setRemainingChars(100 - newText.length);
}

但這樣的話,輸入框每次改變都會觸發兩次 state 更新,兩次 re-render。

實際上:

// ? 正確做法
const [text, setText] = useState('');

// 直接算,不需要 state
const remainingChars = 100 - text.length;

function handleChange(e) {
  setText(e.target.value);
}

一行代碼搞定,而且根本沒有多余的 re-render。

還有,我之前想用 state 來存一個"用戶操作了沒"的標志,用來控制要不要顯示某個提示:

// ? 不需要
const [hasOpened, setHasOpened] = useState(false);

if (someCondition && !hasOpened) {
  showTip();
  setHasOpened(true);
}

這會讓組件重新渲染一遍(雖然 UI 可能不會變)。其實我只需要:

// ? 用 useRef
const hasOpenedRef = useRef(false);

if (someCondition && !hasOpenedRef.current) {
  showTip();
  hasOpenedRef.current = true;
}

ref 改變時不會觸發 re-render,所以這里用它最合適。

寫在最后

我和你說這些,不是為了裝逼。而是想讓你知道:

我也是從各種坑里爬出來的。

每一個"原來是這樣"的時刻,都是在項目里被 bug 追著跑的時候學到的。

所以如果你現在寫的代碼不夠完美,項目里還有各種 setState 的問題,這很正常。關鍵是要去理解——為什么會這樣?為什么 React 要異步更新?為什么不能直接改對象?

一旦你真正理解了這些原理,不是背下來,而是在項目里用過幾次,踩過幾個坑,那么回頭看你最開始的代碼,你就會笑出聲來。

然后你會開始寫出更清晰、更少bug、更好維護的代碼。

責任編輯:武曉燕 來源: 前端達人
相關推薦

2019-10-30 14:44:41

Prometheus開源監控系統

2024-05-06 00:00:00

緩存高并發數據

2024-04-01 08:05:27

Go開發Java

2023-03-13 13:36:00

Go擴容切片

2015-12-14 13:54:51

百度運維大數據

2017-07-17 15:46:20

Oracle并行機制

2022-07-06 11:47:27

JAVAfor循環

2025-10-16 08:10:59

2022-04-26 21:49:55

Spring事務數據庫

2018-01-10 13:40:03

數據庫MySQL表設計

2023-12-14 17:34:22

Kubernetes集群K8s

2025-04-09 09:26:28

C 語言柔性數組編程

2015-03-24 16:29:55

默認線程池java

2021-12-28 08:17:41

循環 forgo

2025-04-29 10:17:42

2021-08-04 11:05:19

B端C端設計

2018-09-11 09:14:52

面試公司缺點

2019-09-25 15:30:15

2021-02-21 09:28:24

kafka系統并發量

2020-03-13 14:45:14

Java枚舉代碼
點贊
收藏

51CTO技術棧公眾號

黄色一级大片在线免费看国产一| 在线免费观看av的网站| 粉嫩av一区二区夜夜嗨| 国产亚洲网站| 综合国产在线视频| 亚洲美女喷白浆| 国产高清精品一区二区| 波多野结衣精品久久| 一本色道综合久久欧美日韩精品| 91九色国产在线播放| 久久久久久久久97黄色工厂| 国产欧美精品一区二区三区-老狼| 日本黄色小说视频| 深爱激情综合网| 91精品国产福利| 亚洲 高清 成人 动漫| 日本在线观看视频| av电影天堂一区二区在线观看| 亚洲精品国久久99热| 欧美亚洲伦理www| 我要看黄色一级片| 蜜桃tv一区二区三区| 7777精品伊人久久久大香线蕉最新版| 黄色一级视频在线播放| 免费在线看黄| 久久久青草青青国产亚洲免观| 日韩美女在线观看一区| 青青草在线观看视频| 精品一区毛片| 亚洲成色777777在线观看影院| 国产wwwxx| 蜜桃麻豆av在线| 一区二区欧美国产| 香蕉久久免费影视| 性感美女视频一二三| 国产黄色91视频| 国产精品视频99| 四虎精品永久在线| 亚洲二区精品| 久久久久久国产精品美女| 美国精品一区二区| 国产日产精品_国产精品毛片| 精品国产91亚洲一区二区三区婷婷 | 久草精品在线播放| 91九色国产在线播放| 玉米视频成人免费看| 正在播放一区| 在线播放麻豆| 中文久久乱码一区二区| 欧美一区免费视频| 亚洲女则毛耸耸bbw| 中国精品一区二区| 天堂在线亚洲视频| 欧洲成人在线观看| 中文字字幕在线中文| 一区二区久久| 91精品国产乱码久久久久久久久 | 国产精品大片wwwwww| 国产精品suv一区二区三区| 欧美日韩视频| 欧美国产高跟鞋裸体秀xxxhd| 欧美另类videoxo高潮| 99久久婷婷这里只有精品 | 精品国产乱码久久久久久郑州公司| 国产浮力第一页| 国产久卡久卡久卡久卡视频精品| 成人夜晚看av| 99久久一区二区| 国产精品亚洲午夜一区二区三区 | 日韩av电影国产| 69成人免费视频| 日韩精品91亚洲二区在线观看| 热门国产精品亚洲第一区在线| 国产精品第5页| 丝袜a∨在线一区二区三区不卡| 国产成人精品免费视频| 中国a一片一级一片| 精品一区在线看| 亚洲japanese制服美女| 亚洲国产视频一区二区三区| 99在线精品视频| 日本一区二区三区www| а√天堂中文在线资源bt在线| 亚洲国产精品ⅴa在线观看| 一卡二卡3卡四卡高清精品视频| 理论片午午伦夜理片在线播放| 亚洲免费在线播放| 日韩精品一区在线视频| 都市激情亚洲一区| 欧美日韩久久久久久| 欧美日本在线播放| 中文字幕第10页| 国产伦精品一区二区三区在线播放 | 国产精品成人va在线观看| 亚洲一区二区天堂| 国产成人一区二区精品非洲| 久久婷婷人人澡人人喊人人爽| 高h视频在线| 亚洲欧美成人一区二区三区| av之家在线观看| 亚洲精品一区三区三区在线观看| 91精品国产综合久久蜜臀| 好男人香蕉影院| 久久精品不卡| 97国产精品人人爽人人做| 中文字幕无码乱码人妻日韩精品| 国产精品99久久久久久宅男| 蜜桃传媒视频麻豆第一区免费观看 | 久久亚洲精品石原莉奈| 国产乱色国产精品免费视频| 久久五月天婷婷| 91小视频xxxx网站在线| 色综合久久久久| 国产毛片久久久久久| 美女毛片一区二区三区四区| 免费97视频在线精品国自产拍| 黄色一级片免费看| 国产一区二区三区日韩| 欧美一区二区在线视频观看| 免费在线国产视频| 欧美色网站导航| 91玉足脚交白嫩脚丫| 午夜激情久久| 国产成人极品视频| 欧美亚洲精品在线观看| 亚洲视频在线一区| www日韩视频| 日韩在线影视| 久久久免费高清电视剧观看| 亚洲无码久久久久| 国产欧美精品国产国产专区 | 久久久久在线视频| 久久一区亚洲| 国内视频一区| 久草在线视频福利| 欧美一区二区三区白人| 能直接看的av| 日日嗨av一区二区三区四区| 久草一区二区| 九色porny丨入口在线| 精品国产亚洲一区二区三区在线观看| 成人高潮免费视频| 麻豆精品一区二区三区| 欧美13一14另类| 色资源二区在线视频| 欧美成人video| 久久久久亚洲av无码专区| 精品一区二区三区香蕉蜜桃| 一区二区视频在线播放| 欧美久久久网站| 中文字幕亚洲国产| 成年人视频免费| 亚洲国产精品成人综合色在线婷婷| 欧美视频免费播放| 视频一区中文| 国产精品444| 91吃瓜网在线观看| 欧美人与性动xxxx| 神马午夜精品91| 国产一区二区三区高清播放| 日韩一级片一区二区| 北条麻妃在线一区二区免费播放 | wwwwww国产| 久久在线观看免费| 国产极品美女高潮无套久久久| 清纯唯美亚洲经典中文字幕| 91精品国产沙发| 欧洲精品久久一区二区| 欧美视频二区36p| 亚洲国产精品成人综合久久久| 1024精品一区二区三区| 久久精品美女| 制服丝袜专区在线| 中文字幕亚洲欧美日韩高清| 91丨九色丨蝌蚪丨对白| 国产精品久线在线观看| 九九九久久久久久久| 欧美在线精品一区| 激情小说综合网| cao在线视频| 亚洲免费一在线| 西西44rtwww国产精品| 久久久久久久久久久久久女国产乱 | 欧美一区午夜精品| 久久久久成人精品无码| 激情网站在线| 亚洲成人一区在线| 亚洲av无码一区二区三区人| 精品一区精品二区高清| 久久久久久久香蕉| 久久99国产精一区二区三区| 国产男女猛烈无遮挡91| 日本一级理论片在线大全| 亚洲精品自拍第一页| 久久久久久av无码免费看大片| 亚洲欧美另类在线| 亚洲精品女人久久久| 久久精品国内一区二区三区| 国产精品av免费观看| 国内精品久久久久久久久电影网| 国产一区欧美二区三区| 激情网站在线| 亚洲第一区第二区| 波多野结衣高清在线| 亚洲综合色网站| 波多野结衣a v在线| 国产精品自拍三区| 日韩精品第1页| 波多野结衣在线观看一区二区| 国产精品制服诱惑| 久久天堂影院| 亲子乱一区二区三区电影| 国产在线69| 在线视频欧美日韩| 天堂av在线资源| 欧美日本高清视频在线观看| 久久久久在线视频| 亚洲欧洲在线观看av| 日韩一级av毛片| 不卡一区二区在线| 天天看片天天操| 日韩电影免费在线| 日韩欧美国产综合在线| 中文字幕免费精品| 亚洲高清在线观看一区| 日本一区二区三区视频在线看 | 91牛牛免费视频| www.成人爱| 精品国模在线视频| 黄色网址在线播放| 亚洲国产精品久久久| 一级成人免费视频| 91电影在线观看| 中文字幕第四页| 亚洲成人免费看| 丝袜美腿小色网| 国产精品沙发午睡系列990531| 超碰男人的天堂| 国产suv一区二区三区88区| 6080亚洲精品一区二区| 手机在线免费看毛片| 国产精品成人免费在线| 91精品人妻一区二区三区| 26uuu国产在线精品一区二区| 天天干天天色天天干| 精品一二线国产| 久久久久久久高清| 蜜桃av一区二区| 日本不卡一区二区在线观看| 日韩电影在线看| wwwwww.色| 免费观看在线综合| 四季av一区二区| 欧美aaaaaa午夜精品| 久久精品午夜福利| 日韩成人免费在线| 在线观看国产一级片| 日韩精品欧美精品| 天堂在线资源视频| 青草av.久久免费一区| 蜜桃福利午夜精品一区| 国产又黄又大久久| 在线免费黄色小视频| 国产91丝袜在线播放九色| 亚洲制服在线观看| 国产成人精品亚洲午夜麻豆| 大桥未久恸哭の女教师| 成人毛片老司机大片| 亚洲成人日韩在线| 91美女视频网站| 国产精品酒店视频| 亚洲精品乱码久久久久久| 亚洲国产成人精品综合99| 亚洲国产精品一区二区尤物区| 久久久久久久久久综合| 欧美色视频日本版| 中文字幕久久网| 欧美一区二区播放| 午夜视频在线播放| 91精品欧美综合在线观看最新| av高清一区二区| 亚洲国产中文字幕在线观看| 免费黄色在线视频网站| www.亚洲免费视频| 免费在线看黄色| 欧美精品videossex88| 成人香蕉视频| 日本不卡高字幕在线2019| 另类一区二区| 国产精品一区视频网站| 清纯唯美日韩| 青青视频免费在线观看| 免费在线亚洲| 成人不卡免费视频| 成人免费高清视频| 9.1片黄在线观看| 亚洲女同一区二区| 欧美人一级淫片a免费播放| 欧美成人伊人久久综合网| 亚州男人的天堂| 久久艹在线视频| 久久天堂av| 国产福利不卡| 日韩欧美伦理| 日本免费不卡一区二区| 久久超碰97中文字幕| 中文精品在线观看| 国产精品久久久久久久久免费丝袜| 日韩av免费网址| 欧美一区2区视频在线观看| 九色在线播放| 九九九久久久久久| 玖玖精品在线| 久久久神马电影| 国产精品v欧美精品v日本精品动漫| 男人的天堂狠狠干| 狠狠色伊人亚洲综合成人| 中文字幕一区二区三区人妻不卡| 国产精品传媒视频| 日韩一级在线视频| 亚洲国产日韩欧美在线动漫 | 欧美一区二区三区免费大片| 天堂在线资源8| 欧美精品免费看| 成人黄色毛片| 国产精品毛片va一区二区三区| 色喇叭免费久久综合| 成人一区二区三| 国产成人精品1024| 免费看特级毛片| 欧美日韩一级视频| 欧美色图另类| 欧美在线一区二区视频| 欧美日韩导航| 国产一级大片免费看| 国产精品一卡二| 全网免费在线播放视频入口| 欧美视频在线观看一区| 成人在线免费视频| 国产精品久久久久9999| 亚洲精品aaaaa| 日本www在线播放| 97久久精品人人爽人人爽蜜臀| 免费在线一级片| 精品久久久久一区二区国产| 男人天堂手机在线| 国产精品夫妻激情| 精品高清在线| 国产淫片av片久久久久久| 久久天天做天天爱综合色| 91丝袜一区二区三区| 亚洲男人天堂2024| 国产精品xx| 欧美极品日韩| 日韩中文字幕麻豆| 干b视频在线观看| 欧美系列亚洲系列| 日本中文字幕电影在线免费观看| 国产精品免费久久久| 欧美疯狂party性派对| 在线观看中文av| 一区二区三区四区高清精品免费观看| 亚洲高清在线观看视频| 久久人91精品久久久久久不卡| 国产精品毛片av| aⅴ在线免费观看| 国产女同互慰高潮91漫画| 中文字幕91爱爱| 欧美成人网在线| 欧美一性一交| 国产激情在线观看视频| ●精品国产综合乱码久久久久| av官网在线观看| 久久人人爽人人爽人人片av高请| 日韩成人一级| 男人添女人下面免费视频| 日韩理论片一区二区| 成人午夜视频一区二区播放| 欧美亚洲成人精品| 日本高清免费电影一区| 丰满饥渴老女人hd| 欧美午夜女人视频在线| youjizz在线播放| 91在线免费看片| 亚洲影音先锋| 北条麻妃在线观看视频| 亚洲电影免费观看| 成人av色网站| 久久久久久久久久久综合| 91伊人久久大香线蕉| 精品国产www| 久久91亚洲人成电影网站| 欧美亚洲色图校园春色| 搡的我好爽在线观看免费视频| 岛国av在线不卡| 美女国产在线| 欧美性大战久久久久| 国产成人免费av在线| 黄色免费av网站| 欧美日韩xxxxx|