精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产伦理在线观看| 久久99导航| 日本青青草视频| av成人资源| 欧美午夜精品久久久久久浪潮 | 亚洲综合伊人| 亚洲影视资源网| 久久亚洲综合网| 亚洲一卡二卡在线| 亚洲欧洲日本一区二区三区| 日韩亚洲欧美在线| av观看免费在线| 国产三级在线播放| 不卡av在线网| 国产精品一区专区欧美日韩| 538任你躁在线精品视频网站| 天堂av一区二区三区在线播放| 欧美三级三级三级爽爽爽| 在线观看17c| 日韩电影免费| 国产盗摄视频一区二区三区| 国产+人+亚洲| 性欧美疯狂猛交69hd| 亚洲系列另类av| 欧美mv和日韩mv国产网站| 久久人妻精品白浆国产| 任你弄在线视频免费观看| 久久久www成人免费无遮挡大片| 亚洲综合小说区| 小泽玛利亚一区二区三区视频| 欧美日韩国产色综合一二三四| 在线播放亚洲激情| 日批在线观看视频| 欧美专区一区| 欧美色视频一区| 国产肥臀一区二区福利视频| 午夜羞羞小视频在线观看| 中文av字幕一区| 欧美精品123| 日本加勒比一区| 国产精品一级在线| 国产一区深夜福利| 国产精品传媒在线观看| 国产手机视频一区二区| 久久久久久久久91| 国产在线一卡二卡| 国产精品成人a在线观看| 亚洲欧美制服丝袜| 国产精品一级黄片| 久久亚洲道色| 日韩女优毛片在线| 91欧美一区二区三区| 精品乱码一区二区三区四区| 色婷婷一区二区| 日本中文字幕网址| 国产精品电影| 欧美日韩国产一区在线| 精品无码一区二区三区爱欲| 成人无遮挡免费网站视频在线观看| 中国av一区二区三区| 日韩亚洲视频| 幼a在线观看| 国产精品久久久久久户外露出| 亚洲欧洲日本国产| 午夜在线小视频| 国产精品成人在线观看| 一级日韩一区在线观看| 麻豆传媒在线观看| 国产精品免费久久久久| 一区二区在线中文字幕电影视频 | 色综合视频一区二区三区44| 欧美性视频一区二区三区| 久久久久久久少妇| 国产成人免费9x9x人网站视频| 色88888久久久久久影院野外| 国产精品欧美激情在线观看| 欧美精选视频一区二区| 精品视频一区三区九区| 中文字幕资源在线观看| 国产精品久久久久久久久久久久久久久| 在线观看91av| 国产精品无码自拍| 亚洲精品3区| 中文字幕欧美日韩| 久久99久久99精品免费看小说| 欧美精品啪啪| 欧美激情videos| 在线精品免费视| 美女视频网站黄色亚洲| 3d动漫精品啪啪一区二区三区免费| 亚洲精品字幕在线| www欧美成人18+| 久久av秘一区二区三区| 久久一卡二卡| 欧美亚洲愉拍一区二区| 亚洲成人手机在线观看| 开心激情综合| 色综合亚洲精品激情狠狠| 国产盗摄x88av| 久久九九国产| 91在线视频九色| 日韩精品视频无播放器在线看| 综合av第一页| 国产精品秘入口18禁麻豆免会员| 日本国产亚洲| 亚洲国产精品va在线| 欧美日韩国产黄色| 一区二区毛片| 亚洲mm色国产网站| 污视频在线免费观看| 国产精品久久久久桃色tv| www.国产在线视频| 色诱色偷偷久久综合| 日韩精品久久久久久福利| 久久久久久久久久97| 免费永久网站黄欧美| 91在线免费观看网站| 成人在线免费电影| 丁香五六月婷婷久久激情| 特级西西444www| 国产一区二区观看| 久久久伊人日本| 97超碰资源站| 国产免费成人在线视频| 欧美视频免费看欧美视频| 一区二区三区无毛| 国产午夜精品全部视频播放 | 欧美性猛交xxxx黑人交| 天天躁日日躁狠狠躁av麻豆男男| 久久免费精品视频在这里| 欧美一区二三区| 亚洲国产精彩视频| 国产精品久久久久四虎| 欧美一级裸体视频| 美女毛片一区二区三区四区| 欧美激情视频在线免费观看 欧美视频免费一 | 一区二区久久精品| 精品国产乱码| 欧美一区二区三区免费视| 高h调教冰块play男男双性文| 亚洲欧美影音先锋| 一级黄色特级片| 不卡日本视频| 国产精品久久综合av爱欲tv| 黄网站在线观看| 日韩欧美在线视频| www.自拍偷拍| 久久精品一区二区国产| 欧美色图亚洲自拍| 性欧美freehd18| 在线观看91久久久久久| 少妇无套内谢久久久久| 国产女人18毛片水真多成人如厕| 999精品网站| 欧美日韩伦理在线免费| 国产成人精彩在线视频九色| 久热av在线| 91国模大尺度私拍在线视频| 中文字幕国产专区| 视频精品一区二区| 天堂√在线观看一区二区| 久久野战av| 日韩在线视频导航| 国产伦精品一区二区三区免.费| 国产精品乱码一区二区三区软件 | 99久久综合狠狠综合久久| 亚洲精品久久久久久久蜜桃臀| 超碰成人福利| 91精品国产免费久久久久久| 台湾av在线二三区观看| 色噜噜狠狠色综合中国| av资源在线免费观看| 国内精品伊人久久久久av一坑| 亚洲第一精品区| 丁香五月缴情综合网| 欧亚精品中文字幕| 欧美激情视频在线播放| 精品国产免费人成电影在线观看四季 | www.欧美日本| 久久久9色精品国产一区二区三区| 91嫩草免费看| 英国三级经典在线观看| 色噜噜国产精品视频一区二区| 国产色片在线观看| 性感美女极品91精品| 国产手机在线观看| 极品少妇xxxx精品少妇偷拍| 国产夫妻自拍一区| 亚洲婷婷丁香| 亚洲在线免费观看| av日韩亚洲| 久久婷婷国产麻豆91天堂| 天堂成人在线视频| 欧美日韩在线直播| 男人天堂中文字幕| 国产亚洲一区字幕| 日本亚洲一区二区三区| 中文高清一区| 中文字幕制服丝袜在线| 伊人久久大香线蕉综合网蜜芽| 国产日韩欧美电影在线观看| 欧美人与禽猛交乱配| 亚洲最新中文字幕| 三级小视频在线观看| 欧美午夜不卡在线观看免费| 久久久久久久久艹| 国产精品污污网站在线观看| 欲求不满的岳中文字幕| 国内精品免费**视频| 粉嫩虎白女毛片人体| 欧美特黄视频| 制服诱惑一区| 九九热爱视频精品视频| www.久久草| 国产91精品在线| 4p变态网欧美系列| 免费污视频在线观看| 这里只有精品在线播放| 四虎影视精品成人| 日韩视频免费观看高清在线视频| 69视频免费在线观看| 日韩三级电影网| 国产午夜在线视频| 91cn在线观看| av网站导航在线观看免费| 一区二区三区日韩在线观看| 国产激情在线免费观看| 国产精品影视天天线| 啊啊啊国产视频| 99视频精品| 日韩国产小视频| 亚洲激情久久| 亚洲蜜桃在线| 狠狠做深爱婷婷综合一区| 国产日韩欧美二区| 91精品尤物| 91亚洲va在线va天堂va国| 99亚洲伊人久久精品影院| 97在线视频国产| 黄色美女视频在线观看| 欧美成人免费一级人片100| 8888四色奇米在线观看| 国产亚洲精品久久久久久777| 外国精品视频在线观看| 亚洲第一福利网| 黄色av免费观看| 日韩精品一区二区三区蜜臀 | 国产女人18毛片水18精品| 亚洲黄色免费看| 66m—66摸成人免费视频| 91资源在线观看| 欧美精品国产精品日韩精品| 天堂8中文在线| 欧美疯狂xxxx大交乱88av| a免费在线观看| 欧美激情视频网| 九色porny丨入口在线| 91精品国产九九九久久久亚洲| 超碰91在线观看| 欧洲精品在线视频| 性欧美1819sex性高清| 国产精品99久久久久久白浆小说| 久久sese| 国产一区二区色| 免费一级欧美片在线观看网站| 99久久精品久久久久久ai换脸| 婷婷视频一区二区三区| 国产欧美日韩一区二区三区| 日韩精品欧美大片| 欧美日韩电影一区二区三区| 欧美日韩一二| 中国黄色录像片| 伊人久久成人| 午夜dv内射一区二区| 精品一区精品二区高清| 久久久久无码精品| 99视频热这里只有精品免费| 麻豆精品免费视频| 中文字幕一区二区三区视频| 黄色一级视频免费观看| 精品国产精品自拍| 中国一级片黄色一级片黄| 777午夜精品视频在线播放| japanese国产| 精品一区二区三区四区在线| 日本中文字幕在线看| 欧美激情中文字幕乱码免费| 玛雅亚洲电影| 亚洲自拍另类欧美丝袜| 性欧美lx╳lx╳| eeuss中文| 先锋影音久久| 亚洲高清视频免费| 99re这里都是精品| 国产免费美女视频| 亚洲午夜免费福利视频| 99久久久无码国产精品免费蜜柚 | 亚洲欧美综合在线观看| 综合欧美国产视频二区| 国产蜜臀在线| 国产日本欧美一区二区三区| 亚洲一二av| 午夜精品视频在线观看一区二区| 亚洲视屏一区| 久久婷婷综合色| 99久久久精品| a级片在线观看免费| 欧美亚洲一区三区| 人妻妺妺窝人体色www聚色窝| 色噜噜国产精品视频一区二区| 僵尸再翻生在线观看| 亚洲综合中文字幕在线观看| 精品视频国产| 69堂免费视频| 成人网在线免费视频| 女性裸体视频网站| 在线亚洲人成电影网站色www| 成人h动漫精品一区二区无码| 激情欧美日韩| 天天av天天翘天天综合网| 国产精品露脸自拍| 欧美午夜精品一区二区| 亚洲五码在线| 国产精品一区二区你懂得| 日本不卡二三区| 欧美日韩第二页| 99久久精品久久久久久清纯| 在线看的片片片免费| 欧美日韩中文字幕一区| 日色在线视频| 68精品国产免费久久久久久婷婷 | 毛片在线播放网址| 国模视频一区二区三区| 日韩精品三级| 黄黄视频在线观看| 精品亚洲欧美一区| 中文字幕第69页| 欧美在线播放高清精品| 国产专区在线播放| 日本不卡免费高清视频| 台湾色综合娱乐中文网| 黄色成人在线看| 成人教育av在线| 国产在线拍揄自揄拍| 精品久久久久久久一区二区蜜臀| 99福利在线| 99久热re在线精品视频| 中文字幕日韩一区二区不卡| 亚洲精品mv在线观看| 亚洲日本在线a| 国产女人18毛片水18精| 久久躁日日躁aaaaxxxx| 精品一区二区三区四区五区| 女女同性女同一区二区三区按摩| 极品美女销魂一区二区三区| 精品一区二区在线观看视频| 欧美日韩黄色影视| 麻豆网站在线| 亚洲自拍偷拍在线| 国产综合亚洲精品一区二| 四虎精品一区二区| 亚洲成av人片在线观看无码| 日韩在线观看视频一区二区三区| 97国产成人精品视频| 亚洲丝袜美腿一区| 久久久久久久久久久久91| 中文字幕日韩欧美一区二区三区| 国产免费不卡av| 欧美激情在线狂野欧美精品| 欧亚精品一区| 手机视频在线观看| 亚洲人成影院在线观看| 狠狠躁日日躁夜夜躁av| 欧美中在线观看| 不卡在线一区二区| 巨乳女教师的诱惑| 亚洲成人www| 国产高清在线| 亚洲aⅴ日韩av电影在线观看| 好吊日精品视频| 欧美特黄一区二区三区| 欧美日韩国产一二三| 日本h片在线| 日韩免费电影一区二区三区| 狠狠色丁香久久婷婷综合丁香| 免费毛片在线播放免费| 亚洲精品一区二三区不卡| 亚洲国产综合在线观看| 丝袜人妻一区二区三区| 中文无字幕一区二区三区| 成 人 免费 黄 色| 日本久久久久亚洲中字幕| 婷婷丁香综合| 国产精品探花一区二区在线观看| 精品视频色一区| 国产精选在线| 中文字幕精品—区二区日日骚| thepron国产精品| 一级黄色大片网站| 性欧美xxxx|