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

在 React 中進行事件驅動的狀態管理「實踐」

開發 前端
今天,我們將討論 Context API 的替代方法:Storeon。Storeon 是一個微型的、事件驅動的 React 狀態管理庫,其原理類似于 Redux。用 Redux DevTools 可以查看并可視化狀態操作。Storeon 內部使用 Context API 來管理狀態,并采用事件驅動的方法進行狀態操作。

  [[342442]]

前言

自 Hook 被引入 React 以來,Context API 與 Hook 庫在應用狀態管理中被一起使用。但是把 Context API 和 Hooks(許多基于 Hooks 的狀態管理庫建立在其基礎上)組合的用法對于大規模應用來說可能效率不高。

由于必須創建一個自定義的 Hook 才能啟用對狀態及其方法的訪問,然后才能在組件中使用它,所以在實際開發中很繁瑣。這違反了 Hook 的真正目的:簡單。但是對于較小的應用,Redux 可能會顯得太重了。

今天,我們將討論 Context API 的替代方法:Storeon。Storeon 是一個微型的、事件驅動的 React 狀態管理庫,其原理類似于 Redux。用 Redux DevTools 可以查看并可視化狀態操作。Storeon 內部使用 Context API 來管理狀態,并采用事件驅動的方法進行狀態操作。

Store

store 是在應用程序狀態下存儲的數據的集合。它是通過從 Storeon 庫導入的 createStoreon() 函數創建的。

createStoreon() 函數接受模塊列表,其中每個模塊都是一個接受 store 參數并綁定其事件監聽器的函數。這是一個store 的例子:

  1. import { createStoreon } from 'storeon/react' 
  2. // todos module 
  3. const todos = store => {  store.on(event, callback) 
  4. }export default const store = createStoreon([todos]) 

模塊化

Storeon 中的 store 是模塊化的,也就是說,它們是獨立定義的,并且沒有被綁定到 Hook 或組件。每個狀態及其操作方法均在被稱為模塊的函數中定義。這些模塊被傳遞到 createStoreon() 函數中,然后將其注冊為全局 store。

store 有三種方法:

  1. store.get() – 用于檢索狀態中的當前數據。
  2. store.on(event, callback) – 用于把事件偵聽器注冊到指定的事件名稱。
  3. store.dispatch(event, data) – 用于發出事件,并根據定義的事件要求將可選數據傳遞進來。

Events

Storeon 是基于事件的狀態管理庫,狀態更改由狀態模塊中定義的事件發出。Storeon 中有三個內置事件,它們以 @ 開頭。其他事件不帶 @ 前綴定義。三個內置事件是:

  1. @init – 在應用加載時觸發此事件。它用于設置應用的初始狀態,并執行傳遞給它的回調中的所有內容。
  2. @dispatch – 此事件在每個新動作上觸發。這對于調試很有用。
  3. @changed – 當應用狀態發生更改時,將觸發此事件。

注意:store.on(event,callback) 用于在我們的模塊中添加事件監聽器。

演示程序

為了演示在 Storeon 中如何執行應用程序狀態操作,我們將構建一個簡單的 notes 程序。還會用 Storeon 的另一個軟件包把狀態數據保存在 localStorage 中。

假設你具有 JavaScript 和 React 的基本知識。你可以在https://github.com/Youngestdev/storeon-app 上找到本文中使用的代碼。

設置

在深入探討之前,讓我們先勾勒出 Notes 程序所需的項目結構和依賴項的安裝。從創建項目文件夾開始。

  1. mkdir storeon-app && cd storeon-app 
  2. mkdir {src,public,src/Components} 
  3. touch public/{index.html, style.css} && touch src/{index,store,Components/Notes}.js 

接下來,初始化目錄并安裝所需的依賴項。

  1. npm init -y 
  2. npm i react react-dom react-scripts storeon @storeon/localstorage uuidv4 

接下來就是在 index.js文件中編寫父組件了。

`index.js`

這個文件負責渲染我們的筆記組件。首先導入所需的包。

  1. import React from 'react' 
  2.  import { render } from 'react-dom'
  3.   function App() { 
  4.    return ( 
  5.     <> 
  6.        Hello! 
  7.     </> 
  8.    ); 
  9. const root = document.getElementById('root'); 
  10. render(<App />, root); 

接下來通過在 store.js 中編寫用于狀態的初始化和操作的代碼來構建 store。

`store.js`

此文件負責處理應用中的狀態和后續狀態管理操作。我們必須創建一個模塊來存儲狀態以及支持事件,以處理操作變更。

首先,從 Storeon 導入 createStoreon 方法和唯一隨機ID生成器 UUID。

createStoreon 方法負責將我們的 狀態 注冊到全局 store 。

  1. import { createStoreon } from 'storeon'
  2. import { v4 as uuidv4 } from 'uuid' 
  3. import { persistState } from '@storeon/localstorage'
  4. let note = store => {} 

我們將狀態存儲在數組變量 notes 中,該變量包含以下格式的注釋:

  1.   id: 'note id'
  2.   item: 'note item' 
  3. }, 

接下來,我們將用兩個注釋(在首次啟動程序時會顯示)來初始化狀態,從而首先填充注釋模塊。然后,定義狀態事件。

  1. let note = store => { 
  2.  store.on('@init', () => ({ 
  3.    notes: [ 
  4.      { id: uuidv4(), item: 'Storeon is a React state management library and unlike other state management libraries that use Context, it utilizes an event-driven approach like Redux.' }, 
  5.    { id: uuidv4(), item: 'This is a really short note. I have begun to study the basic concepts of technical writing and I'\'m optimistic about becoming one of the best technical writers.' }, 
  6.    ] 
  7.  }); 
  8.  store.on('addNote', ({ notes }, note) => { 
  9.    return { 
  10.      notes: [...notes, { id: uuidv4(), item: note }], 
  11.    }  });  store.on('deleteNote', ({ notes }, id) => ({ 
  12.  });16} 

在上面的代碼中,我們定義了狀態,并用兩個簡短的注釋填充了狀態,并定義了兩個事件和一個從 dispatch(event, data) 函數發出事件后將會執行的回調函數。

在 addNote 事件中,我們返回添加了新 note 的更新后的狀態對象,在 deleteNote 事件中把 ID 傳遞給調度方法的 note 過濾掉。

最后,把模塊分配給可導出變量 store ,將其注冊為全局 store,以便稍后將其導入到上下文 provider 中,并將狀態存儲在 localStorage 中。

  1. const store = createStoreon([ 
  2.   notes,  // Store state in localStorage 
  3.  persistState(['notes']), 
  4. ]);export default store; 

接下來,在 Notes.js 中編寫 Notes 應用組件。

`Notes.js`

此文件包含 Notes 程序的組件。我們將從導入依賴項開始。

  1. import React from 'react'
  2. import { useStoreon } from 'storeon/react'

接下來,編寫組件。

  1. const Notes = () => { 
  2.   const { dispatch, notes } = useStoreon('notes'); 
  3.  const [ value, setValue ] = React.useState('');  

在上面的代碼的第二行中,useStoreon() hook 的返回值設置為可破壞的對象。useStoreon() hook 使用模塊名稱作為其參數,并返回狀態和調度方法以發出事件。

接下來定義在組件中發出狀態定義事件的方法 。

  1. const Notes = () => { 
  2. ...   const deleteNote = id => { 
  3.     dispatch('deleteNote', id) 
  4.  };  const submit = () => { 
  5.    dispatch('addNote', value); 
  6.   setValue(''); 
  7.  };  const handleInput = e => { 
  8.    setValue(e.target.value);  };} 

讓我們回顧一下上面定義的三種方法:

  1. deleteNote(id) – 此方法在觸發時調度deleteNote事件。
  2. submit() – 該方法通過傳遞輸入狀態的值來調度addNote事件,該狀態在Notes組件中本地定義。
  3. handleInput() – 此方法將本地狀態的值設置為用戶輸入。

Next, we’ll build the main interface of our app and export it.接下來,我們將構建應用程序的主界面并將其導出。

  1. const Notes = () => { 
  2.   ...  return (   <section
  3.       <header>Quick Notes</header> 
  4.       <div className='addNote'
  5.         <textarea onChange={handleInput} value={value} /> 
  6.        <button onClick={() => submit()}> Add A Note </button> 
  7.       </div> 
  8.       <ul> 
  9.         {notes.map(note => (          <li key={note.id}> 
  10.             <div className='todo'
  11.               <p>{note.item}</p> 
  12.               <button onClick={() => deleteNote(note.id)}>Delete note</button> 
  13.            </div> 
  14.           </li> 
  15.         ))}      </ul> 
  16.   );24}25 

這樣就構成了我們的Notes組件。接下來為我們的應用和index.html文件編寫樣式表。

`index.html`

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.    <meta charset="UTF-8"
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0"
  6.     <meta http-equiv="X-UA-Compatible" content="ie=edge"
  7.    <link rel="stylesheet" href="style.css"
  8.     <title>Storeon Todo App</title> 
  9. </head> 
  10. <body> 
  11.    <div id="root"></div> 
  12. </body> 
  13. </html> 

接下來,填充style.css文件。

`style.css`

  1.  * { 
  2.    box-sizing: border-box; 
  3.    margin: 0; 
  4.    padding: 0; 
  5.  }  section { 
  6.    display: flex; 
  7.    justify-content: center; 
  8.   align-items: center; 
  9.   flex-direction: column
  10.   width: 300px; 
  11.   margin: auto; 
  12. }header { 
  13.   text-align: center; 
  14.   font-size: 24px; 
  15.   line-height: 40px; 
  16. }ul { 
  17.   display: block; 
  18. }.todo { 
  19.   display: block; 
  20.   margin: 12px 0; 
  21.   width: 300px; 
  22.   padding: 16px; 
  23.   box-shadow: 0 8px 12px 0 rgba(0, 0, 0, 0.3); 
  24.   transition: 0.2s; 
  25.   word-break: break-word; 
  26. }li { 
  27.   list-style-type: none; 
  28.   display: block; 
  29. }textarea { 
  30.   border: 1px double
  31.   box-shadow: 1px 1px 1px #999; 
  32.   height: 100px; 
  33.   margin: 12px 0; 
  34.   width: 100%; 
  35.   padding: 5px 10px; 
  36. }button { 
  37.   margin: 8px 0; 
  38.   border-radius: 5px; 
  39.   padding: 10px 25px; 
  40. }.box:hover { 
  41.   box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); 

運行

現在我們已經成功編寫了組件和樣式表,但是還沒有更新 index.js 中的父組件來渲染 Notes 組件。接下來讓我們渲染 Notes 組件。

`index.js`

要訪問我們的全局 store,必須導入 store 和 Storeon store 上下文組件。我們還將導入 notes 組件來進行渲染。

用以下代碼替換組件的內容:

  1.  import { render } from 'react-dom'
  2.  import { StoreContext } from 'storeon/react'
  3.  import Notes from './Components/Notes'
  4.  import store from '../src/store'
  5.   
  6.  function App() { 
  7.    return ( 
  8.      <> 
  9.       <StoreContext.Provider value={store}> 
  10.         <Notes /> 
  11.       </StoreContext.Provider> 
  12.     </> 
  13.   ); 
  14.  
  15. const root = document.getElementById('root'); 
  16. render(<App />, root); 

在第 8-10 行,調用 store 上下文提供程序組件,并將 notes 組件作為使用者傳遞。store 上下文提供程序組件將全局 store 作為其上下文值。

接下來把 package.json 文件中的腳本部分編輯為以下內容:

  1. "scripts": { 
  2.   "start""react-scripts start"

然后運行我們的程序:

  1. npm run start 

讓我們繼續添加和刪除注釋:

在 React 中進行事件驅動的狀態管理「實踐」

 

Storeon devtools

Storeon 與 Redux 有著相似的屬性,可以在 Redux DevTools 中可視化和監視狀態的更改。為了可視化 Storeon 程序中的狀態,我們將導入 devtools 包,并將其作為參數添加到我們 store.js 文件的 createStoreon() 方法中。

  1. ... 
  2. import { storeonDevtools } from 'storeon/devtools'
  3. ...const store = createStoreon([  ...,  process.env.NODE_ENV !== 'production' && storeonDevtools, 
  4. ]); 

這是用 Redux DevTools 可視化狀態變化的演示:

在 React 中進行事件驅動的狀態管理「實踐」

 

總結

Storeon 是一個非常有用的狀態管理庫,它用事件驅動和 Redux 改變的模塊化樣式來管理狀態。你可以在 https://github.com/Youngestdev/storeon-app 上找到本文中的代碼。 

 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2009-06-22 10:29:11

集成測試Spring

2009-03-03 09:00:57

Silverlight數據驗證UI控件

2011-08-01 10:41:59

Xcode 條件編譯

2021-03-24 09:30:02

Jupyter not單元測試代碼

2023-08-02 08:02:30

Redis數據原生方法

2021-08-27 14:36:01

主題建模BerTopic

2023-10-18 18:31:04

SQL查詢數據

2012-04-09 13:39:37

ibmdw

2022-03-29 20:10:27

React狀態管理

2025-01-14 00:00:00

2021-10-19 09:46:22

ReactGo 技術

2019-04-18 09:15:05

DaskPython計算

2020-06-30 08:23:00

JavaScript開發技術

2024-05-06 13:34:28

WireGoogleGo

2009-12-28 13:59:12

ADO調用存儲過程

2023-06-19 15:38:38

JavaScripAPI

2024-01-31 12:06:32

PostgreSQL遞歸函數查詢

2021-08-13 13:39:29

云計算云計算環境云應用

2021-01-21 11:13:41

人工智能銷售預測AI

2024-04-22 09:12:39

Redux開源React
點贊
收藏

51CTO技術棧公眾號

欧美成人精品一区二区三区| 欧美日本一道本| 免费国产一区| 中文字幕人妻一区二区三区视频 | 7878成人国产在线观看| 波多野结衣av一区二区全免费观看| 亚洲AV成人无码一二三区在线| 三级成人在线视频| 欧美第一淫aaasss性| 一卡二卡三卡四卡| 免费观看性欧美大片无片| 欧美性猛交xxxx久久久| 国产91porn| h视频在线播放| 丁香五精品蜜臀久久久久99网站| 国产精品成熟老女人| 国产在线拍揄自揄拍无码视频| 欧美日韩久久精品| 日韩精品一区二区在线| www午夜视频| 男人av在线播放| 一区二区三区四区在线免费观看| 日韩片电影在线免费观看| 国精品人妻无码一区二区三区喝尿| 免费观看久久久4p| 99久久激情| 亚洲成人精品久久| 日韩高清第一页| 在线天堂资源| 亚洲国产综合色| 一本一本久久a久久精品综合妖精| 天堂成人在线观看| 国产成人无遮挡在线视频| 国产精品久久久久久亚洲影视| 日韩少妇高潮抽搐| 国内自拍一区| 裸体女人亚洲精品一区| 东京热无码av男人的天堂| 无码日韩精品一区二区免费| 精品国产乱码久久| 中文字幕1区2区| 视频免费一区二区| 这里只有精品视频在线观看| 久久久久久久久久久免费| 999这里有精品| 91超碰碰碰碰久久久久久综合| 久久国产精品免费精品3p| 在线看国产一区| 日韩少妇内射免费播放| 欧美少妇网站| 天天操天天综合网| 国产欧美日韩网站| 超清av在线| 亚洲国产美国国产综合一区二区| 国产免费xxx| mm1313亚洲国产精品美女| 18成人在线视频| 91制片厂免费观看| 黄网站在线免费| 亚洲免费伊人电影| 欧美狂野激情性xxxx在线观| 超碰中文在线| 欧美日韩色婷婷| 欧洲av无码放荡人妇网站| www.成人影院| 精品视频一区 二区 三区| 污污网站免费观看| 国产色99精品9i| 日韩美女视频在线| 亚洲一区二区在线免费| 亚洲大片精品免费| 中文字幕不卡av| 九九精品视频免费| 伊人成人在线| 日本精品视频网站| 一级黄色免费看| 丁香婷婷综合网| 欧美一区二区在线| 欧美13一16娇小xxxx| 亚洲综合无码一区二区| av黄色在线网站| 国产精品videossex撒尿| 3d动漫精品啪啪| 好吊色视频一区二区三区| 亚洲人和日本人hd| 久久精品视频中文字幕| 国产精品999久久久| 视频一区视频二区中文字幕| 国产精品入口福利| 亚洲精品18p| 久久精品综合网| 超碰97在线看| 深夜视频一区二区| 欧美不卡激情三级在线观看| 一卡二卡三卡四卡| 中文字幕亚洲综合久久五月天色无吗''| 久久久久女教师免费一区| 看黄色一级大片| 国产凹凸在线观看一区二区| 日本在线观看一区二区三区| 九九热99视频| 日本一二三区不卡| 水野朝阳av一区二区三区| 亚洲在线www| 日本人妖在线| 亚洲乱码国产乱码精品精的特点| 日本精品免费在线观看| 欧美午夜网站| 一区二区亚洲精品国产| 国产精品变态另类虐交| 另类小说综合欧美亚洲| 久久精品日产第一区二区三区精品版| 日本不卡三区| 色悠悠久久综合| 95视频在线观看| 色乱码一区二区三区网站| 韩剧1988免费观看全集| 99精品国产99久久久久久97| 国产调教视频一区| 91猫先生在线| aaa国产精品| 久久精品这里热有精品| 国产一级片一区二区| 99视频国产精品| 中文字幕在线中文| 色成人综合网| 在线观看亚洲区| 亚洲黄网在线观看| 99免费精品视频| www.欧美黄色| 国产欧美视频在线| 日韩在线资源网| 日韩不卡高清视频| 久久久久久久久免费| 妞干网在线视频观看| 91国内精品| 色综合久久精品亚洲国产| 97超碰人人模人人人爽人人爱| 久久综合九色综合欧美98| 妞干网在线视频观看| 久久动漫网址| …久久精品99久久香蕉国产| 人妻偷人精品一区二区三区| 亚洲午夜在线视频| 制服丝袜在线第一页| 国内一区二区三区| 国产一区二区高清不卡| av中文字幕在线看| 亚洲第一福利网| 日本黄色片视频| 97久久超碰国产精品电影| 欧美精品久久久久久久自慰| 国产成人福利av| 9.1国产丝袜在线观看| 日韩a在线观看| 一本一道综合狠狠老| 精品成人无码一区二区三区| 日本最新不卡在线| 永久域名在线精品| 国产一区二区av在线| 欧美韩日一区二区| 色综合久久久久久| 一道本成人在线| 羞羞在线观看视频| 国产剧情一区二区| 日本中文字幕亚洲| 日韩电影不卡一区| 国产精品久久久久91| 午夜毛片在线| 精品福利在线导航| 羞羞影院体验区| 国产精品色在线| 精品国产aⅴ一区二区三区东京热| 激情成人综合| 欧洲精品码一区二区三区免费看| 99欧美精品| 欧美成aaa人片免费看| 色婷婷av一区二区三区之e本道| 欧美性猛xxx| 日韩成人短视频| 成人国产亚洲欧美成人综合网| 日本不卡在线观看视频| 久久伦理在线| 国产亚洲精品美女久久久m| 欧美亚洲韩国| 欧美裸体男粗大视频在线观看| 蜜臀av在线观看| 精品视频免费看| 久久丫精品久久丫| 国产日韩精品视频一区| 波多野结衣在线免费观看| 欧美视频二区36p| 荫蒂被男人添免费视频| 美女诱惑一区| 日本黄网站色大片免费观看| 欧美福利在线播放网址导航| 国产精品成人免费电影| 天堂av中文在线| 亚洲一区二区精品| 精品人妻少妇嫩草av无码专区| 欧美日韩另类字幕中文| 天堂网avav| 久久久夜色精品亚洲| 国产xxxxhd| 日产欧产美韩系列久久99| 欧美又粗又长又爽做受| 欧美亚洲激情| 国产一区二区在线网站| yy6080久久伦理一区二区| 韩国三级日本三级少妇99| 国产精品入口免费视| 欧美成人精品一区二区男人看| 亚洲第一福利在线观看| 国产乱人乱偷精品视频a人人澡| 精品女同一区二区三区在线播放| 99热6这里只有精品| 久久色视频免费观看| 91传媒理伦片在线观看| 九色综合国产一区二区三区| 免费观看精品视频| 亚洲狠狠婷婷| 日韩精品一区二区在线视频| 99精品在线观看| 日本精品一区二区| 欧美变态挠脚心| 成人av免费看| 日韩免费高清视频网站| 国产日韩在线观看av| 播放一区二区| 国产成人精品视频在线| 中文字幕乱码中文乱码51精品| 九九精品在线播放| 国产视频在线播放| 久久天天躁狠狠躁夜夜躁| 97在线观看免费观看高清| 国产亚洲精品美女久久久| 久久久久久久影视| 亚洲另类激情图| 天天干天天草天天射| 亚洲国产欧美一区| 欧美一区二区黄片| 亚洲国产精品系列| 午夜黄色小视频| 日韩电影网在线| 奇米影视888狠狠狠777不卡| 亚洲精品一区二区网址| 飘雪影院手机免费高清版在线观看| 日韩精品免费综合视频在线播放| 无码精品视频一区二区三区| 亚洲国产精品成人va在线观看| 日韩一级在线播放| 国产视频一区在线| 国产福利片在线| 在线一区二区日韩| 久久黄色美女电影| 欧美成人剧情片在线观看| 日本孕妇大胆孕交无码| 欧美极品在线视频| 日产福利视频在线观看| 国产97色在线| 亚洲精品无播放器在线播放| 亚洲精品免费一区二区三区| 538任你躁精品视频网免费| 国产一区二区视频在线免费观看 | 欧美精品国产一区| www.成年人视频| 国产精品视区| 亚洲国产精品三区| 国产一区视频在线看| 7777精品伊人久久久大香线蕉 | 青青青草视频在线| 久久久免费高清电视剧观看| 午夜av不卡| 国产精品一区二区三区久久| 精品国产亚洲一区二区三区在线| 成人h在线播放| 国产成人福利夜色影视| 国产三级欧美三级日产三级99| 成人网站免费观看| 亚洲国产精品精华液2区45| 熟女av一区二区| 午夜欧美在线一二页| www.久久精品视频| 午夜免费一级片| 亚洲情侣在线| 欧美成人高潮一二区在线看| 美女视频一区免费观看| 亚洲免费黄色录像| av一区二区三区在线| 久久午夜精品视频| 亚洲国产一区二区a毛片| 国产精品久久久久久久久久精爆| 欧美日韩精品一区二区三区四区 | 美女视频黄久久| 无码人妻久久一区二区三区蜜桃| 久久久不卡影院| www.超碰在线观看| 欧美性受xxxx黑人xyx性爽| www.亚洲欧美| 在线电影av不卡网址| jizz一区二区三区| 国产日本欧美在线观看| 丝袜久久网站| 91精品一区二区三区四区| 日韩国产欧美在线视频| 免费啪视频在线观看| 中文在线一区二区 | 欧美日韩精品一区视频| 四虎精品在永久在线观看| 欧美精品制服第一页| 成人开心激情| 久久亚洲午夜电影| 国产综合激情| 天堂网成人在线| 国产欧美日韩中文久久| 97超碰人人干| 日韩精品一区二区三区视频播放 | 国产成人精品久久二区二区| 99香蕉久久| av动漫在线免费观看| 久久91精品久久久久久秒播| 性高潮久久久久久久| 欧美日韩免费观看中文| 国产 欧美 自拍| 欧美精品中文字幕一区| 国产激情一区| japanese在线视频| 麻豆国产欧美日韩综合精品二区| 国产艳俗歌舞表演hd| 天天综合天天做天天综合| 亚洲黄色在线免费观看| 欧美第一黄色网| 日韩在线网址| av日韩在线看| 国产精品亚洲成人| 午夜69成人做爰视频| 制服丝袜亚洲播放| 国产区在线观看| 91九色精品视频| 国产高清欧美| 最新免费av网址| 亚洲欧美日韩国产中文在线| 国产精品免费无遮挡| 久久精品亚洲精品| 成人污污视频| 992tv快乐视频| 成人美女视频在线观看18| 国产一级片久久| 亚洲国产日韩欧美综合久久| 国产盗摄——sm在线视频| 精品一区久久| 性欧美videos另类喷潮| 免费看黄色av| 911精品国产一区二区在线| 二区三区在线观看| 超碰97人人在线| 亚洲精品一级| 妺妺窝人体色WWW精品| 欧美视频一区二区三区在线观看 | 国内国产精品天干天干| 亚洲欧洲日韩综合一区二区| 国产喷水吹潮视频www| 欧美精品中文字幕一区| 欧美xxxx在线| 国产精品igao| 亚洲精品欧美二区三区中文字幕| 国产精品一区二区av白丝下载| 九九热精品视频国产| 久9re热视频这里只有精品| 可以在线看的黄色网址| 国产精品国产三级国产aⅴ中文 | 亚洲精品一区二三区不卡| 欧美成人app| 国产精品亚洲天堂| 成人短视频下载| 男操女视频网站| 欧美成人午夜激情在线| 欧美交a欧美精品喷水| 免费看污黄网站| 亚洲最新视频在线播放| 男女污污视频在线观看| 91亚洲人电影| 亚洲欧美日韩精品一区二区| 国产亚洲精品久久久久久豆腐| 日韩欧美国产一区二区在线播放| 在线看的毛片| 日韩不卡一二区| www激情久久| 国产suv精品一区二区69| 欧美一级淫片aaaaaaa视频| 国产国产精品| 国产在线观看无码免费视频| 欧美精品乱人伦久久久久久| 国产高清中文字幕在线| 最新欧美日韩亚洲| 91麻豆.com| www.精品久久| 国产精品亚洲自拍| 亚洲视频二区| 69xx绿帽三人行|