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

輕松入門React和Webpack

移動開發(fā)
最近在學(xué)習(xí)React.js,之前都是直接用最原生的方式去寫React代碼,發(fā)現(xiàn)組織起來特別麻煩,之前聽人說用Webpack組織React組件得心應(yīng)手,就花了點時間學(xué)習(xí)了一下,收獲頗豐。

最近在學(xué)習(xí)React.js,之前都是直接用最原生的方式去寫React代碼,發(fā)現(xiàn)組織起來特別麻煩,之前聽人說用Webpack組織React組件得心應(yīng)手,就花了點時間學(xué)習(xí)了一下,收獲頗豐。

說說React

一個組件,有自己的結(jié)構(gòu),有自己的邏輯,有自己的樣式,會依賴一些資源,會依賴某些其他組件。比如日常寫一個組件,比較常規(guī)的方式:

- 通過前端模板引擎定義結(jié)構(gòu)

- JS文件中寫自己的邏輯

- CSS中寫組件的樣式

- 通過RequireJS、SeaJS這樣的庫來解決模塊之間的相互依賴,

那么在React中是什么樣子呢?

結(jié)構(gòu)和邏輯

在React的世界里,結(jié)構(gòu)和邏輯交由JSX文件組織,React將模板內(nèi)嵌到邏輯內(nèi)部,實現(xiàn)了一個JS代碼和HTML混合的JSX。

結(jié)構(gòu)

在JSX文件中,可以直接通過React.createClass來定義組件:

  1. var CustomComponent = React.creatClass({ 
  2.     render: function(){ 
  3.         return (); 
  4.     } 
  5. }); 

 通過這種方式可以很方便的定義一個組件,組件的結(jié)構(gòu)定義在render函數(shù)中,但這并不是簡單的模板引擎,我們可以通過js方便、直觀的操控組件結(jié)構(gòu),比如我想給組件增加幾個節(jié)點:

QQ截圖20150701181207.png

通過這種方式,React使得組件擁有靈活的結(jié)構(gòu)。那么React又是如何處理邏輯的呢?

邏輯

寫過前端組件的人都知道,組件通常首先需要相應(yīng)自身DOM事件,做一些處理。必要時候還需要暴露一些外部接口,那么React組件要怎么做到這兩點呢?

事件響應(yīng)

比如我有個按鈕組件,點擊之后需要做一些處理邏輯,那么React組件大致上長這樣:

  1. var ButtonComponent = React.createClass({ 
  2.     render: function(){ 
  3.         return (屠龍寶刀,點擊就送); 
  4.     } 
  5. }); 

點擊按鈕應(yīng)當觸發(fā)相應(yīng)地邏輯,一種比較直觀的方式就是給button綁定一個onclick事件,里面就是需要執(zhí)行的邏輯了:

  1. function getDragonKillingSword() { 
  2.     //送寶刀 
  3. var ButtonComponent = React.createClass({ 
  4.     render: function(){ 
  5.         return (屠龍寶刀,點擊就送); 
  6.     } 
  7. }); 

這樣就實現(xiàn)內(nèi)部事件的響應(yīng)了,那如果需要暴露接口怎么辦呢?

暴露接口

 

事實上現(xiàn)在getDragonKilling

  1. <br> 

Sword已經(jīng)是一個接口了,如果有一個父組件,想要調(diào)用這個接口怎么辦呢?

 

父組件大概長這樣:

  1. var ImDaddyComponent = React.createClass({ 
  2.     render: function(){ 
  3.         return ( 
  4.                             //其他組件 
  5.                                 //其他組件 
  6.                     ); 
  7.     } 
  8. }); 

那么如果想手動調(diào)用組件的方法,首先在ButtonComponent上設(shè)置一個ref=""屬性來標記一下,比如這里把子組件設(shè)置成,那么在父組件的邏輯里,就可以在父組件自己的方法中通過這種方式來調(diào)用接口方法:

  1. this.refs.getSwordButton.getDragonKillingSword(); 

看起來屌屌噠~那么問題又來了,父組件希望自己能夠按鈕點擊時調(diào)用的方法,那該怎么辦呢?

配置參數(shù)

父組件可以直接將需要執(zhí)行的函數(shù)傳遞給子組件:

然后在子組件中調(diào)用父組件方法:

  1. var ButtonComponent = React.createClass({ 
  2.     render: function(){ 
  3.         return (屠龍寶刀,點擊就送); 
  4.     } 
  5. }); 

子組件通過this.props能夠獲取在父組件創(chuàng)建子組件時傳入的任何參數(shù),因此this.props也常被當做配置參數(shù)來使用。

屠龍寶刀每個人只能領(lǐng)取一把,按鈕點擊一下就應(yīng)該灰掉,應(yīng)當在子組件中增加一個是否點擊過的狀態(tài),這又應(yīng)當處理呢?

組件狀態(tài)

在React中,每個組件都有自己的狀態(tài),可以在自身的方法中通過this.state取到,而初始狀態(tài)則通過getInitialState()方法來定義,比如這個屠龍寶刀按鈕組件,它的初始狀態(tài)應(yīng)該是沒有點擊過,所以getInitialState方法里面應(yīng)當定義初始狀態(tài)clicked: false。而在點擊執(zhí)行的方法中,應(yīng)當修改這個狀態(tài)值為click: true:

  1. var ButtonComponent = React.createClass({ 
  2.     getInitialState: function(){ 
  3.         //確定初始狀態(tài) 
  4.         return { 
  5.             clicked: false 
  6.         }; 
  7.     }, 
  8.     getDragonKillingSword: function(){ 
  9.         //送寶刀 
  10.         //修改點擊狀態(tài) 
  11.         this.setState({ 
  12.             clicked: true 
  13.         }); 
  14.     }, 
  15.     render: function(){ 
  16.         return (屠龍寶刀,點擊就送); 
  17.     } 
  18. }); 

這樣點擊狀態(tài)的維護就完成了,那么render函數(shù)中也應(yīng)當根據(jù)狀態(tài)來維護節(jié)點的樣式,比如這里將按鈕設(shè)置為disabled,那么render函數(shù)就要添加相應(yīng)的判斷邏輯:

  1. render: function(){ 
  2.     var clicked = this.state.clicked; 
  3.     if(clicked) 
  4.         return (屠龍寶刀,點擊就送); 
  5.     else  
  6.         return (屠龍寶刀,點擊就送); 

小節(jié)

這里簡單介紹了通過JSX來管理組件的結(jié)構(gòu)和邏輯,事實上React給組件還定義了很多方法,以及組件自身的生命周期,這些都使得組件的邏輯處理更加強大

#p#

資源加載

CSS文件定義了組件的樣式,現(xiàn)在的模塊加載器通常都能夠加載CSS文件,如果不能一般也提供了相應(yīng)的插件。事實上CSS、圖片可以看做是一種資源,因為加載過來后一般不需要做什么處理。

React對這一方面并沒有做特別的處理,雖然它提供了Inline Style的方式把CSS寫在JSX里面,但估計沒有多少人會去嘗試,畢竟現(xiàn)在CSS樣式已經(jīng)不再只是簡單的CSS文件了,通常都會去用Less、Sass等預(yù)處理,然后再用像postcss、myth、autoprefixer、cssmin等等后處理。資源加載一般也就簡單粗暴地使用模塊加載器完成了

組件依賴

組件依賴的處理一般分為兩個部分:組件加載和組件使用。

組件加載

React沒有提供相關(guān)的組件加載方法,依舊需要通過<script>標簽引入,或者使用模塊加載器加載組件的JSX和資源文件。

組件使用

如果細心,就會發(fā)現(xiàn)其實之前已經(jīng)有使用的例子了,要想在一個組件中使用另外一個組件,比如在ParentComponent中使用ChildComponent,就只需要在ParentComponent的render()方法中寫上<ChildComponent />就行了,必要的時候還可以傳些參數(shù)。

疑問

到這里就會發(fā)現(xiàn)一個問題,React除了只處理了結(jié)構(gòu)和邏輯,資源也不管,依賴也不管。是的,React將近兩萬行代碼,連個模塊加載器都沒有提供,更與Angularjs,jQuery等不同的是,他還不帶啥腳手架...沒有Ajax庫,沒有Promise庫,要啥啥沒有...

虛擬DOM

那它為啥這么大?因為它實現(xiàn)了一個虛擬DOM(Virtual DOM)。虛擬DOM是干什么的?這就要從瀏覽器本身講起

如我們所知,在瀏覽器渲染網(wǎng)頁的過程中,加載到HTML文檔后,會將文檔解析并構(gòu)建DOM樹,然后將其與解析CSS生成的CSSOM樹一起結(jié)合產(chǎn)生愛的結(jié)晶——RenderObject樹,然后將RenderObject樹渲染成頁面(當然中間可能會有一些優(yōu)化,比如RenderLayer樹)。這些過程都存在與渲染引擎之中,渲染引擎在瀏覽器中是于JavaScript引擎(JavaScriptCore也好V8也好)分離開的,但為了方便JS操作DOM結(jié)構(gòu),渲染引擎會暴露一些接口供JavaScript調(diào)用。由于這兩塊相互分離,通信是需要付出代價的,因此JavaScript調(diào)用DOM提供的接口性能不咋地。各種性能優(yōu)化的最佳實踐也都在盡可能的減少DOM操作次數(shù)。

而虛擬DOM干了什么?它直接用JavaScript實現(xiàn)了DOM樹(大致上)。組件的HTML結(jié)構(gòu)并不會直接生成DOM,而是映射生成虛擬的JavaScript DOM結(jié)構(gòu),React又通過在這個虛擬DOM上實現(xiàn)了一個 diff 算法找出最小變更,再把這些變更寫入實際的DOM中。這個虛擬DOM以JS結(jié)構(gòu)的形式存在,計算性能會比較好,而且由于減少了實際DOM操作次數(shù),性能會有較大提升

道理我都懂,可是為什么我們沒有模塊加載器?

所以就需要Webpack了

說說Webpack

什么是Webpack?

事實上它是一個打包工具,而不是像RequireJS或SeaJS這樣的模塊加載器,通過使用Webpack,能夠像Node.js一樣處理依賴關(guān)系,然后解析出模塊之間的依賴,將代碼打包

安裝Webpack

首先得有Node.js

然后通過npm install -g webpack安裝webpack,當然也可以通過gulp來處理webpack任務(wù),如果使用gulp的話就npm install --save-dev gulp-webpack

配置Webpack

Webpack的構(gòu)建過程需要一個配置文件,一個典型的配置文件大概就是這樣

  1. var webpack = require('webpack'); 
  2. var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js'); 
  3.  
  4. module.exports = { 
  5.     entry: { 
  6.         entry1: './entry/entry1.js'
  7.         entry2: './entry/entry2.js' 
  8.     }, 
  9.     output: { 
  10.         path: __dirname, 
  11.         filename: '[name].entry.js' 
  12.     }, 
  13.     resolve: { 
  14.         extensions: ['''.js''.jsx'
  15.     }, 
  16.     module: { 
  17.         loaders: [{ 
  18.             test: /\.js$/, 
  19.             loader: 'babel-loader' 
  20.         }, { 
  21.             test: /\.jsx$/, 
  22.             loader: 'babel-loader!jsx-loader?harmony' 
  23.         }] 
  24.     }, 
  25.     plugins: [commonsPlugin] 
  26. }; 

這里對Webpack的打包行為做了配置,主要分為幾個部分:

  • entry:指定打包的入口文件,每有一個鍵值對,就是一個入口文件
  • output:配置打包結(jié)果,path定義了輸出的文件夾,filename則定義了打包結(jié)果文件的名稱,filename里面的[name]會由entry中的鍵(這里是entry1和entry2)替換
  • resolve:定義了解析模塊路徑時的配置,常用的就是extensions,可以用來指定模塊的后綴,這樣在引入模塊時就不需要寫后綴了,會自動補全
  • module:定義了對模塊的處理邏輯,這里可以用loaders定義了一系列的加載器,以及一些正則。當需要加載的文件匹配test的正則時,就會調(diào)用后面的loader對文件進行處理,這正是webpack強大的原因。比如這里定義了凡是.js結(jié)尾的文件都是用babel-loader做處理,而.jsx結(jié)尾的文件會先經(jīng)過jsx-loader處理,然后經(jīng)過babel-loader處理。當然這些loader也需要通過npm install安裝
  • plugins: 這里定義了需要使用的插件,比如commonsPlugin在打包多個入口文件時會提取出公用的部分,生成common.js

當然Webpack還有很多其他的配置,具體可以參照它的配置文檔

執(zhí)行打包

如果通過npm install -g webpack方式安裝webpack的話,可以通過命令行直接執(zhí)行打包命令,比如這樣:

  1. $webpack --config webpack.config.js 
這樣就會讀取當前目錄下的webpack.config.js作為配置文件執(zhí)行打包操作

如果是通過gulp插件gulp-webpack,則可以在gulpfile中寫上gulp任務(wù):

  1. var gulp = require('gulp'); 
  2. var webpack = require('gulp-webpack'); 
  3. var webpackConfig = require('./webpack.config'); 
  4. gulp.task("webpack"function() { 
  5.     return gulp 
  6.         .src('./'
  7.         .pipe(webpack(webpackConfig)) 
  8.         .pipe(gulp.dest('./build')); 
  9. }); 

#p#

組件編寫

使用Babel提升逼格

Webpack使得我們可以使用Node.js的CommonJS規(guī)范來編寫模塊,比如一個簡單的Hello world模塊,就可以這么處理:

  1. var React = require('react'); 
  2.  
  3. var HelloWorldComponent = React.createClass({ 
  4.     displayName: 'HelloWorldComponent'
  5.     render: function() { 
  6.         return (<div>Hello world</div>); 
  7.     } 
  8. }); 
  9.  
  10. module.exports = HelloWorldComponent; 

等等,這和之前的寫法沒啥差別啊,依舊沒有逼格...程序員敲碼要有g(shù)eek范,要逼格than逼格,這太low了。現(xiàn)在都ES6了,React的代碼也要寫ES6,babel-loader就是干這個的。Babel能夠?qū)S6代碼轉(zhuǎn)換成ES5。首先需要通過命令npm install --save-dev babel-loader來進行安裝,安裝完成后就可以使用了,一種使用方式是之前介紹的在webpack.config.js的loaders中配置,另一種是直接在代碼中使用,比如:

  1. var HelloWorldComponent = require('!babel!jsx!./HelloWorldComponent'); 
那我們應(yīng)當如何使用Babel提升代碼的逼格呢?改造一下之前的HelloWorld代碼吧:
  1. import React from 'react'
  2.  
  3. export default class HelloWorldComponent extends React.Component { 
  4.     constructor() { 
  5.         super(); 
  6.         this.state = {}; 
  7.     } 
  8.     render() { 
  9.         return (<div>Hello World</div>); 
  10.     } 

這樣在其他組件中需要引入HelloWorldComponent組件,就只要就可以了:

  1. import HelloWorldComponent from './HelloWorldComponent' 
怎么樣是不是更有逼格了?通過import引入模塊,還可以直接定義類和類的繼承關(guān)系,這里也不再需要getInitialState了,直接在構(gòu)造函數(shù)constructor中用this.state = xxx就好了

Babel帶來的當然還不止這些,在其幫助下還能嘗試很多優(yōu)秀的ES6特性,比如箭頭函數(shù),箭頭函數(shù)的特點就是內(nèi)部的this和外部保持一致,從此可以和that、_this說再見了

  1. ['H', 'e', 'l', 'l', 'o'].map((c) => { 
  2.     return (<span>{c}</span>); 
  3. }); 

其他還有很多,具體可以參照Babel的學(xué)習(xí)文檔

樣式編寫

我是一個強烈地Less依賴患者,脫離了Less直接寫CSS就會出現(xiàn)四肢乏力、不想干活、心情煩躁等現(xiàn)象,而且還不喜歡在寫Less時候加前綴,平常都是gulp+less+autoprefixer直接處理的,那么在Webpack組織的React組件中要怎么寫呢?

沒錯,依舊是使用loader

可以在webpack.config.js的loaders中增加Less的配置:

  1.   test: /\.less$/, 
  2.   loader: 'style-loader!css-loader!autoprefixer-loader!less-loader' 

通過這樣的配置,就可以直接在模塊代碼中引入Less樣式了:

  1. import React from 'react'
  2.  
  3. require('./HelloWorldComponent.less'); 
  4.  
  5. export default class HelloWorldComponent extends React.Component { 
  6.     constructor() { 
  7.         super(); 
  8.         this.state = {}; 
  9.     } 
  10.     render() { 
  11.         return (<div>Hello World</div>); 
  12.     } 

其他

Webpack的loader為React組件化提供了很多幫助,像圖片也提供了相關(guān)的loader:

  1. { test: /\.png$/, loader: "url-loader?mimetype=image/png" } 
更多地loader可以移步webpack的wiki

##在Webpack下實時調(diào)試React組件

Webpack和React結(jié)合的另一個強大的地方就是,在修改了組件源碼之后,不刷新頁面就能把修改同步到頁面上。這里需要用到兩個庫webpack-dev-server和react-hot-loader。

首先需要安裝這兩個庫,npm install --save-dev webpack-dev-server react-hot-loader

安裝完成后,就要開始配置了,首先需要修改entry配置:

  1. entry: { 
  2.   helloworld: [ 
  3.     'webpack-dev-server/client?http://localhost:3000'
  4.     'webpack/hot/only-dev-server'
  5.     './helloworld' 
  6.   ] 
  7. }, 

通過這種方式指定資源熱啟動對應(yīng)的服務(wù)器,然后需要配置react-hot-loader到loaders的配置當中,比如我的所有組件代碼全部放在scripts文件夾下:

  1.   test: /\.js?$/, 
  2.   loaders: ['react-hot''babel'], 
  3.   include: [path.join(__dirname, 'scripts')] 

最后配置一下plugins,加上熱替換的插件和防止報錯的插件:

  1. plugins: [ 
  2.   new webpack.HotModuleReplacementPlugin(), 
  3.   new webpack.NoErrorsPlugin() 

這樣配置就完成了,但是現(xiàn)在要調(diào)試需要啟動一個服務(wù)器,而且之前配置里映射到http://localhost:3000,所以就在本地3000端口起個服務(wù)器吧,在項目根目錄下面建個server.js:

  1. var webpack = require('webpack'); 
  2. var WebpackDevServer = require('webpack-dev-server'); 
  3. var config = require('./webpack.config'); 
  4.  
  5. new WebpackDevServer(webpack(config), { 
  6.   publicPath: config.output.publicPath, 
  7.   hot: true
  8.   historyApiFallback: true 
  9. }).listen(3000, 'localhost'function (err, result) { 
  10.   if (err) console.log(err); 
  11.   console.log('Listening at localhost:3000'); 
  12. }); 

這樣就可以在本地3000端口開啟調(diào)試服務(wù)器了,比如我的頁面是根目錄下地index.html,就可以直接通過http://localhost:3000/index.html訪問頁面,修改React組件后頁面也會被同步修改,這里貌似使用了websocket來同步數(shù)據(jù)。圖是一個簡單的效果:

[[138854]]

結(jié)束

React的組件化開發(fā)很有想法,而Webpack使得React組件編寫和管理更加方便,這里只涉及到了React和Webpack得很小一部分,還有更多的最佳實踐有待在學(xué)習(xí)的路上不斷發(fā)掘

責任編輯:honglu 來源: Githubs
相關(guān)推薦

2017-03-28 10:11:12

Webpack 2React加載

2020-08-26 07:48:41

React Spect組件庫開發(fā)

2023-06-29 13:43:30

2013-01-16 15:07:30

Android NDKAndroid開發(fā)

2016-08-12 08:49:46

React NativFacebookNative

2010-01-07 13:59:11

Linux入門命令

2010-06-30 15:10:18

2016-08-15 13:34:37

React NativiOSjs入口

2023-12-13 11:23:15

2009-09-23 11:37:31

Hibernate S

2021-08-27 12:59:59

React前端命令

2010-06-07 19:48:30

UML

2021-11-29 07:47:56

RocketMQ分布式消息

2010-06-30 15:26:33

UML靜態(tài)建模

2024-04-16 00:00:00

Spring微服務(wù)架構(gòu)

2010-05-27 18:31:28

SVN入門

2021-12-24 08:01:44

Webpack優(yōu)化打包

2023-05-19 10:04:18

Vue開發(fā)者代碼

2022-05-11 11:54:55

Http傳送協(xié)議

2021-12-25 22:29:04

WebpackRollup 前端
點贊
收藏

51CTO技術(shù)棧公眾號

蜜臀aⅴ国产精品久久久国产老师| 一区二区三区亚洲| 蜜臀av性久久久久蜜臀av| 国产精品久久婷婷| 欧美日韩精选| xxxx在线视频| 妖精视频一区二区三区免费观看| 亚洲va欧美va人人爽午夜| 久久久久久久久一区| 久久久久久亚洲av无码专区| 一本到12不卡视频在线dvd| 亚洲欧美自拍偷拍| 亚洲精品www久久久久久广东| 国产毛片久久久久久国产毛片| 午夜成人鲁丝片午夜精品| 麻豆专区一区二区三区四区五区| 欧美精品电影免费在线观看| 人妻精品久久久久中文| 日韩精品视频免费播放| 久久1电影院| 欧美日韩国产一级| av7777777| av免费看在线| 欧美激情在线一区二区| 国内精品视频免费| 国产女同91疯狂高潮互磨| 久久精品日韩欧美| 高清视频欧美一级| 伊人在线视频观看| 欧美日韩精品一区二区视频| 亚洲成人中文字幕| 国产老头和老头xxxx×| 外国成人毛片| 欧美视频一区二区在线观看| www.爱色av.com| 黄色在线看片| 亚洲最大成人综合| 99精品一区二区三区的区别| 91在线导航| 亚洲国产经典视频| 日韩精品一区二区三区外面 | 国产精品国产精品| 国产乱码久久久| 久久爱www久久做| 国产精品久久久久久av下载红粉| 麻豆精品久久久久久久99蜜桃| 最新成人av网站| 97免费中文视频在线观看| 男女羞羞免费视频| 蜜桃一区二区三区| 亚洲国产精品va在线观看黑人| 免费黄色av网址| 视频亚洲一区二区| 精品成人免费观看| 国产一级黄色录像| 欧美毛片免费观看| 精品性高朝久久久久久久| 无码人妻丰满熟妇啪啪网站| 日韩av超清在线观看| 色婷婷激情久久| 国产免费视频传媒| 福利视频亚洲| 欧美精品精品一区| 亚洲欧美一区二区三区不卡| 日韩第一区第二区| 亚洲第一区在线观看| 亚洲男女在线观看| 久久成人av| 中文字幕日韩视频| 欧美人禽zoz0强交| 激情视频一区| 国产99在线|中文| 又骚又黄的视频| 国产精品综合av一区二区国产馆| 不卡的av一区| 欧洲免费在线视频| 国产精品私人自拍| 久久香蕉视频网站| 忘忧草在线影院两性视频| 91久久一区二区| 想看黄色一级片| 国产一区二区三区亚洲| 亚洲欧美精品一区| 午夜三级在线观看| 亚洲精选在线| 国产精品久久91| 亚洲AV无码精品国产| 91在线看国产| 亚洲精品影院| 91九色在线播放| 在线影视一区二区三区| 国模大尺度视频| 亚洲精品亚洲人成在线| 久久亚洲精品毛片| 五月天婷婷久久| 久久国产麻豆精品| 韩国成人一区| 精品自拍一区| 日韩欧美第一页| 性生活一级大片| 欧美热在线视频精品999| 久久久久北条麻妃免费看| 日韩久久精品视频| 精品夜夜嗨av一区二区三区| 久久国产精品一区二区三区| 超鹏97在线| 色av成人天堂桃色av| 中文字幕avav| 欧美人与牛zoz0性行为| 欧美国产精品va在线观看| 国产一级片av| 91丨九色丨黑人外教| 中国一级大黄大黄大色毛片| 午夜无码国产理论在线| 欧美精品一区二区三区在线播放 | 欧洲成人免费aa| ,一级淫片a看免费| 国产亚洲人成网站| 久久99久久99精品| 国产精品美女久久久久人| 亚洲欧美日韩一区二区在线| 精品无码人妻一区二区三区品| 蜜桃视频在线观看一区| 免费看成人片| av影视在线| 日韩精品专区在线影院重磅| 国产精品麻豆一区| 日韩成人一级大片| 久久综合狠狠综合久久综青草| 肉肉视频在线观看| 91精品久久久久久久91蜜桃| 日本一道本视频| 久久久夜精品| 欧美lavv| 欧美freesex| 亚洲精品99久久久久| 国产波霸爆乳一区二区| 国内精品第一页| 亚洲国产精品影视| 少妇高潮一区二区三区99| 亚洲视频欧洲视频| 高潮毛片又色又爽免费| 91在线观看免费视频| 国产成人无码a区在线观看视频| 亚洲日本va| 欧美精品激情在线观看| 韩国中文字幕hd久久精品| 亚洲一二三区在线观看| 中文字幕第10页| 欧美在线国产| 亚洲va久久久噜噜噜久久天堂| 日本在线视频观看| 欧美人妇做爰xxxⅹ性高电影| 中国女人特级毛片| 青青草成人在线观看| 五月天色一区| 亚洲精品第一| 久久综合伊人77777| aaaa一级片| 亚洲国产精品一区二区www在线| 亚洲图片欧美另类| 日韩午夜精品| 久久精品国产综合精品| 中文字幕影音在线| 国产亚洲精品久久| 亚洲一级特黄毛片| 亚洲精品亚洲人成人网| 日本天堂在线播放| 亚洲国产激情| 日韩精品无码一区二区三区| 婷婷精品久久久久久久久久不卡| 九九久久久久久久久激情| 蜜桃视频久久一区免费观看入口| 午夜不卡在线视频| 国产伦理片在线观看| 蜜臀av一区二区三区| 裸体裸乳免费看| 欧美色图婷婷| 国产精品久久久久久超碰| 中文字幕有码在线视频| 亚洲韩国青草视频| 18国产免费视频| 亚洲免费av在线| 亚洲专区区免费| 久久国产精品一区二区| av高清在线免费观看| 国产永久精品大片wwwapp| 91亚洲国产成人久久精品网站| 草草在线观看| 中文字幕日韩免费视频| 色婷婷中文字幕| 欧美日韩激情在线| 国产成人在线播放视频| 国产精品久久午夜| 漂亮人妻被黑人久久精品| 欧美aⅴ一区二区三区视频| 99国产精品白浆在线观看免费| 亚洲制服欧美另类| 91视频免费在线观看| 日韩pacopacomama| 欧美巨大黑人极品精男| 国产在线网站| 亚洲国产中文字幕久久网| 日本三级一区二区三区| 亚洲图片欧美色图| 亚洲少妇xxx| 久久一夜天堂av一区二区三区| 精品人妻一区二区三| 奇米777欧美一区二区| 可以在线看的av网站| 亚洲国产老妈| 色涩成人影视在线播放| 国产精品115| 亚洲va欧美va在线观看| 视频精品导航| 欧美在线一区二区视频| 欧美一卡二卡| 久久在线视频在线| 91亚洲精选| 亚洲人在线观看| 欧美特级特黄aaaaaa在线看| 91精品国产欧美一区二区18| 中文字幕第31页| 色噜噜狠狠成人网p站| 成年人免费看毛片| 亚洲丰满少妇videoshd| 国产极品国产极品| 中文字幕色av一区二区三区| 国产 欧美 在线| 久久综合九色综合欧美98| 欧美大喷水吹潮合集在线观看| 国产成人免费xxxxxxxx| 欧美成人乱码一二三四区免费| 日本视频一区二区三区| 久久久久久久久久久久久久国产| 国产一区二区三区久久| 日韩亚洲欧美视频| 激情欧美日韩| 野外做受又硬又粗又大视频√| 欧美fxxxxxx另类| 9l视频自拍9l视频自拍| 国产精品久久久久无码av| 亚洲成人第一| 日韩欧美精品一区| 亚洲欧洲中文| 四虎成人av| 中文字幕免费在线不卡| 亚洲精品一区二区妖精| 天天干天天操天天干天天操| 久久密一区二区三区| 一本色道婷婷久久欧美| 国产精品99一区二区三| 免费观看黄色的网站| 亚洲精品99| 精品少妇人欧美激情在线观看| aa亚洲婷婷| 国产午夜福利视频在线观看| 日韩国产欧美三级| 天天干天天草天天| 国产一区二区中文字幕| 日韩精品xxx| 99精品久久99久久久久| 扒开jk护士狂揉免费| 欧美高清在线视频| 99热在线观看精品| 亚洲国产精品久久人人爱| 国产成人无码精品亚洲| 欧美色另类天堂2015| 中文字幕网址在线| 欧美一区二区三区的| 国产成人无码www免费视频播放| 日韩成人在线电影网| 国产1区2区3区在线| 日韩有码片在线观看| 日韩另类在线| 日本一欧美一欧美一亚洲视频| 久久99国产精品二区高清软件| 91成人免费视频| 色综合久久中文| 亚洲一区二区在| 亚洲国产免费看| www黄色在线| 国产一区二区三区久久久 | 日本在线视频www| 久久se精品一区精品二区| 久久无码人妻一区二区三区| 91在线看国产| 永久看片925tv| 91国内精品野花午夜精品| 国产精品久久久久毛片| 日韩精品视频免费专区在线播放| 在线观看a视频| 91av视频导航| 国产视频一区二区在线播放| 久久精品国产美女| 欧美国产91| 777视频在线| 91亚洲大成网污www| 黑鬼狂亚洲人videos| 色狠狠av一区二区三区| www.com在线观看| 自拍偷拍亚洲在线| 美女在线视频免费| 91人人爽人人爽人人精88v| 天堂综合网久久| 国产肉体ⅹxxx137大胆| 日本亚洲免费观看| 久久人妻少妇嫩草av无码专区| 亚洲欧洲精品成人久久奇米网| 免费毛片一区二区三区| 欧美性做爰猛烈叫床潮| 日本不卡123| 日韩美女精品在线| 中国一级片在线观看| 狠狠躁夜夜躁人人躁婷婷91| 999av视频| 中文字幕精品久久久久| 不卡福利视频| 国产三区精品| 午夜精品av| 欧美成人手机在线视频| 久久久亚洲国产美女国产盗摄| 久久久久久久久99| 4hu四虎永久在线影院成人| 国产三级视频在线| 91精品国产91久久久久久久久| 成人综合日日夜夜| 亚洲春色在线视频| 日韩和欧美一区二区| 欧美 日韩 国产 成人 在线观看| 亚瑟在线精品视频| 天堂中文资源在线观看| 欧美激情国产日韩精品一区18| 国产精品国产三级在线观看| 亚洲精品国产一区| 美腿丝袜在线亚洲一区| 亚洲色图 激情小说| 欧美在线影院一区二区| 国产剧情在线观看| 国产精品福利在线观看网址| 中国av一区| 国产a级片免费观看| 久久影院视频免费| 亚洲 日本 欧美 中文幕| 精品99一区二区| 18aaaa精品欧美大片h| 国产精选一区二区| 日韩视频一区二区三区在线播放免费观看| 国产人妻精品午夜福利免费| 亚洲自拍偷拍九九九| 亚洲免费不卡视频| 97免费视频在线| 亚洲精品亚洲人成在线观看| 国产v亚洲v天堂无码久久久| 久久精品人人爽人人爽| 自拍偷拍第八页| 色偷偷噜噜噜亚洲男人| 成人免费91| 国产一二三在线视频| wwwwxxxxx欧美| 少妇久久久久久久| 一区二区三区精品99久久| 欧美另类激情| 欧美中文字幕在线观看视频| 成人免费视频免费观看| 日韩欧美成人一区二区三区 | 国产精品爽黄69天堂a| 香蕉视频官网在线观看日本一区二区| 一级黄色免费毛片| 亚洲福利一区二区三区| 美国成人毛片| 成人高清视频观看www| 国产精品久久| 中文字幕国产专区| 91 com成人网| 精精国产xxxx视频在线野外| 日韩精品久久一区| 国产精品自在在线| 国产精品视频123| 不卡av在线播放| 日本一区福利在线| 日韩欧美国产片| 午夜视频一区二区| 97超碰国产一区二区三区| 国产精品成人一区二区三区 | 国产美女扒开尿口久久久| 一区二区三区在线电影| 国产精品无码毛片| 欧美日韩在线电影| www.51av欧美视频| 亚洲精品一区二| 99久久精品国产一区二区三区| 欧美成人一区二区视频| 久久久久久久97| 视频在线不卡免费观看| 最新在线黄色网址| 欧美一区二区三区免费视频| av高清不卡| 国产aaa免费视频| 亚洲欧洲无码一区二区三区|