久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Vue 中 template 有且只能一個 root的原因解析(源碼分析)

瀏覽:4日期:2023-01-27 09:05:47

引言

今年, 疫情 并沒有影響到各種面經的正常出現,可謂是絡繹不絕(學不動...)。然后,在前段時間也看到一個這樣的關于 Vue 的問題, 為什么每個組件 template 中有且只能一個 root?

可能,大家在平常開發中,用的較多就是 template 寫 html 的形式。當然,不排除用 JSX 和 render() 函數的。但是,究其本質,它們最終都會轉化成 render() 函數。然后,再由 render() 函數轉為 Vritual DOM (以下統稱 VNode )。而 render() 函數轉為 VNode 的過程,是由 createElement() 函數完成的。

因此,本次文章將會先講述 Vue 為什么限制 template 有且只能一個 root 。然后,再分析 Vue 如何規避出現多 root 的情況。那么,接下來我們就從源碼的角度去深究一下這個過程!

一、為什么限制 template 有且只能有一個 root

這里,我們會分兩個方面講解,一方面是 createElement() 的執行過程和定義,另一方面是 VNode 的定義。

1.1 createElement()

createElement() 函數在源碼中,被設計為 render() 函數的參數。所以 官方文檔 也講解了,如何使用 render() 函數的方式創建組件。

而 createElement() 會在 _render 階段執行:

...const { render, _parentVnode } = vm.$options...vnode = render.call(vm._renderProxy, vm.$createElement);

可以很簡單地看出,源碼中通過 call() 將當前實例作為 context 上下文以及 $createElement 作為參數傳入。

Vue2x 源碼中用了大量的 call 和 apply,例如經典的 $set() API 實現數組變化的響應式處理就用的很是精妙,大家有興趣可以看看。

$createElement 的定義又是這樣:

vm.$createElement = (a, b, c, d) => createElement(vm, a, b, c, d, true)

需要注意的是這個是我們手寫 render() 時調用的,如果是寫 template 則會調用另一個 vm._c 方法。兩者的區別在于 createElement() 最后的參數前者為 true,后者為 false。

而到這里,這個 createElement() 實質是調用了 _createElement() 方法,它的定義:

export function _createElement ( context: Component, // vm實例 tag?: string | Class<Component> | Function | Object, // DOM標簽 data?: VNodeData, // vnode數據 children?: any, normalizationType?: number): VNode | Array<VNode> { ...}

現在,見到了我們平常使用的 createElement() 的 廬山真面目 。這里,我們并不看函數內部的執行邏輯,這里分析一下這五個參數:

context ,是 Vue 在 _render 階段傳入的當前實例 tag ,是我們使用 createElement 時定義的根節點 HTML 標簽名 data ,是我們使用 createElement 是傳入的該節點的屬性,例如 class 、 style 、 props 等等 children ,是我們使用 createElement 是傳入的該節點包含的子節點,通常是一個數組 normalizationType ,是用于判斷拍平子節點數組時,要用簡單迭代還是遞歸處理,前者是針對簡單二維,后者是針對多維。

可以看出, createElement() 的設計,是針對一個節點,然后帶 children 的組件的 VNode 的創建。并且,它并沒有留給你進行多 root 的創建的機會,只能傳一個根 root 的 tag ,其他都是它的選項。

1.2 VNode

我想大家都知道 Vue2x 用的靜態類型檢測的方式是 flow ,所以它會借助 flow 實現自定義類型。而 VNode 就是其中一種。那么,我們看看 VNode 類型定義:

前面,我們分析了 createElement() 的調用時機,知道它最終返回的就是 VNode。那么,現在我們來看看 VNode 的定義:

export default class VNode { tag: string | void; data: VNodeData | void; children: ?Array<VNode>; text: string | void; elm: Node | void; ns: string | void; context: Component | void; // rendered in this component’s scope key: string | number | void; componentOptions: VNodeComponentOptions | void; componentInstance: Component | void; // component instance parent: VNode | void; // component placeholder node // strictly internal raw: boolean; // contains raw HTML? (server only) isStatic: boolean; // hoisted static node isRootInsert: boolean; // necessary for enter transition check isComment: boolean; // empty comment placeholder? isCloned: boolean; // is a cloned node? isOnce: boolean; // is a v-once node? asyncFactory: Function | void; // async component factory function asyncMeta: Object | void; isAsyncPlaceholder: boolean; ssrContext: Object | void; fnContext: Component | void; // real context vm for functional nodes fnOptions: ?ComponentOptions; // for SSR caching devtoolsMeta: ?Object; // used to store functional render context for devtools fnScopeId: ?string; // functional scope id support constructor ( tag?: string, data?: VNodeData, children?: ?Array<VNode>, text?: string, elm?: Node, context?: Component, componentOptions?: VNodeComponentOptions, asyncFactory?: Function ) { ... } ...}

可以看到 VNode 所具備的屬性還是蠻多的,本次我們就只看 VNode 前面三個屬性:

tag,即 VNode 對于的標簽名 data,即 VNode 具備的一些屬性 children,即 VNode 的子節點,它是一個 VNode 數組

顯而易見的是 VNode 的設計也是一個 root ,然后由 children 不斷延申下去。這樣和前面 createElement() 的設計相呼應, 不可能會 出現多 root 的情況。

1.3 小結

可以看到 VNode 和 createElement() 的設計,就只是針對單個 root 的情況進行處理,最終形成 樹的結構 。那么,我想這個時候 可能有人會問為什么它們被設計樹的結構?

而針對這個問題,有 兩個方面 ,一方面是樹形結構的 VNode 轉為真實 DOM 后,我們只需要將根 VNode 的真實 DOM 掛載到頁面中。另一方面是 DOM 本身就是樹形結構,所以 VNode 也被設計為樹形結構,而且之后我們分析 template 編譯階段會提到 AST 抽象語法樹,它也是樹形結構。所以,統一的結構可以實現很方便的類型轉化,即從 AST 到 Render 函數,從 Render 函數到 VNode ,最后從 VNode 到真實 DOM 。

Vue 中 template 有且只能一個 root的原因解析(源碼分析)

并且,可以想一個情景,如果多個 root ,那么當你將 VNode 轉為真實 DOM 時,掛載到頁面中,是不是要遍歷這個 DOM Collection ,然后掛載上去,而這個階段又是操作 DOM 的階段。大家都知道的一個東西就是操作 DOM 是 非常昂貴的 。所以,一個 root 的好處在這個時候就體現出它的好處了。

其實這個過程,讓我想起 紅寶書 中在講文檔碎片的時候,提倡把要創建的 DOM 先添加到文檔碎片中,然后將文檔碎片添加到頁面中。(PS:想想第一次看紅寶書是去年 4 月份,剛開始學前端,不經意間過了快一年了....)

二、如何規避出現多 root 的情況

2.1 template 編譯過程

在我們平常的開發中,通常是在 .vue 文件中寫 <template> ,然后通過在 <template> 中創建一個 div 來作為 root ,再在 root 中編寫描述這個 .vue 文件的 html 標簽。當然,你也可以直接寫 render() 函數。

在文章的開始,我們也說了在 Vue 中無論是寫 template 還是 render ,它最終會轉成 render() 函數。而平常開發中,我們用 template 的方式會較多。所以,這個過程就需要 Vue 來編譯 template 。

編譯 template 的這個過程會是這樣:

根據 template 生成 AST (抽象語法樹) 優化 AST ,即對 AST 節點進行靜態節點或靜態根節點的判斷,便于之后 patch 判斷 根據 AST 可執行的函數,在 Vue 中針對這一階段定義了很多 _c 、 _l 之類的函數,就其本質它們是對 render() 函數的封裝

這三個步驟在源碼中的定義:

export const createCompiler = createCompilerCreator(function baseCompile ( template: string, options: CompilerOptions): CompiledResult { // 生成 AST const ast = parse(template.trim(), options) if (options.optimize !== false) { // 優化 AST optimize(ast, options) } // 生成可執行的函數 const code = generate(ast, options) return { ast, render: code.render, staticRenderFns: code.staticRenderFns }})

需要注意的是 Vue-CLI 提供了兩個版本, Runtime-Compiler 和 Runtime ,兩者的區別,在于前者可以將 template 編譯成 render() 函數,但是后者必須手寫 render() 函數

而對于開發中,如果你寫了多個 root 的組件,在 parse 的時候,即生成 AST 抽象語法樹的時候, Vue 就會過濾掉多余的 root ,只認第一個 root 。

而 parse 的整個過程,其實就是正則匹配的過程,并且這個過程會用棧來存儲起始標簽。整個 parse 過程的流程圖:

Vue 中 template 有且只能一個 root的原因解析(源碼分析)

然后,我們通過一個例子來分析一下,其中針對多 root 的處理。假設此時我們定義了這樣的 template :

<div><span></span></div><div></div>

顯然,它是多 root 的。而在處理第一個 <div> 時,會創建對應的 ASTElement ,它的結構會是這樣:

{ type: 1, tag: 'div', attrsList: [], attrsMap: {}, rawAttrsMap: {}, parent: undefined, children: [], start: 0, end: 5}

而此時,這個 ASTElement 會被添加到 stack 中,然后刪除原字符串中的 <div> ,并且設置 root 為該 ASTElement 。

然后,繼續遍歷。對于 <span> 也會創建一個 ASTElement 并入棧,然后刪除繼續下一次。接下來,會匹配到 </span> ,此時會處理標簽的結束,例如于棧頂 ASTElement 的 tag 進行匹配,然后出棧。接下來,匹配到 </div> ,進行和 span 同樣的操作。

最后,對于第二個 root 的 <div> ,會做和上面一樣的操作。但是,在處理 </div> 時,此時會進入判斷 multiple root 的邏輯,即此時字符串已經處理完了,但是這個結束標簽對應的 ASTElement 并不等于我們最初定義的 root 。所以此時就會報錯:

Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.

而且,該 ASTElement 也不會加入最終的 AST 中,所以之后也不可能會出現多個 root 的情況。

同時,這個報錯也提示我們如果要用多個 root ,需要借助 if 條件判斷來實現。

可以看出, template 編譯的最終的目標就是構建一個 AST 抽象語法樹。所以,它會在創建第一個 ASTElement 的時候就確定 AST 的 root ,從而確保 root 唯一性。

2.2 _render 過程

不了解 Vue 初始化過程的同學,可能不太清楚 _render 過程。你可以理解為渲染的過程。在這個階段會調用 render 方法生成 VNode ,以及對 VNode 進行一些處理,最終返回一個 VNode 。

而相比較 template 編譯的過程, _render 過程的判斷就比較簡潔:

if (!(vnode instanceof VNode)) { if (process.env.NODE_ENV !== ’production’ && Array.isArray(vnode)) { warn( ’Multiple root nodes returned from render function. Render function ’ + ’should return a single root node.’, vm ); } vnode = createEmptyVNode();}

前面在講 createElement 的時候,也講到了 render() 需要返回 VNode 。所以,這里是防止部分騷操作, return 了包含多個 VNode 的數組。

結語

通過閱讀,我想大家也明白了 為什么 Vue 中 template 有且只能一個 root ? 。 Vue 這樣設計的出發點可能很簡單,為了減少掛載時 DOM 的操作。但是,它是如何處理多 root 的情況,以及相關的 VNode 、 AST 、 createElement() 等等關鍵點,個人認為都是很值得深入了解的。

到此這篇關于Vue 中 template 有且只能一個 root的原因解析(源碼分析)的文章就介紹到這了,更多相關vue template 有且只能一個 root內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 久久国产精品免费一区二区三区 | 欧美三级影院 | 91在线精品一区二区 | 欧美中文在线 | 精品久久久久久久久久久久久久久 | 五月婷婷在线观看视频 | 亚洲视频免费在线观看 | www.99日本精品片com | 欧洲亚洲视频 | julia一区二区三区中文字幕 | www.you日本 | 日本不卡免费新一二三区 | 亚洲国产精品一区 | 国产精品二区一区二区aⅴ污介绍 | 玖玖国产精品视频 | 九九视频在线 | 不卡的免费av| 一区二区三区免费看 | 亚洲国产精品99久久久久久久久 | 国产成人精品一区二区三区四区 | 国产淫片在线观看 | 国产中文视频 | 国产丝袜一区二区三区免费视频 | 在线观看av国产一区二区 | 日韩www视频| 91亚洲精品一区 | 看a网址 | 欧美三级免费观看 | 亚州中文字幕 | 在线免费观看激情视频 | 国产成人免费视频网站视频社区 | 中文字幕高清在线 | 精品久久久久一区二区国产 | 成人在线看片 | 免费看一区二区三区 | 精品国产综合 | 亚洲精品视频免费 | 久久久久国产 | 欧美 亚洲 另类 激情 另类 | 国产精品一区二区在线 | 中文字幕一区二区三区不卡 | 日本中文字幕视频 | 中文字幕亚洲欧美 | 亚洲网在线 | 亚洲欧洲日韩在线 | 天天操天天曰 | 秋霞在线一区 | 国产精品久久久久久久久 | 四虎av成人 | 一级全黄少妇性色生活片毛片 | 在线视频一区二区 | 亚洲二区视频 | 亚洲午夜精品片久久www慈禧 | 日韩中文一区二区三区 | 久久久久一区二区 | 久久精品欧美一区二区三区不卡 | 99国产精品99久久久久久 | 欧美综合一区二区三区 | 久久91视频 | 免费看的黄色网 | 视频精品一区 | 日韩毛片在线观看 | 国产精品一区二区三区在线播放 | 久草视频免费看 | 午夜精品久久久 | 久久人人爽爽爽人久久久 | 亚洲精品一区二区三区四区高清 | 日本久久精品一区二区 | 91亚洲国产| 亚洲精品一区二区网址 | 欧美日本乱大交xxxxx | 成人精品一区二区三区中文字幕 | 国产大学生援交视频在线观看 | 亚洲国产精品一区 | 国产精品久久久久久久久久免费看 | 欧美一级片在线 | 日本久久www成人免 成人久久久久 | 亚洲一区二区三区国产 | 国产午夜精品一区二区三区 | 嫩草影院网站入口 | 亚洲一区视频 | 君岛美绪一区二区三区 | 在线观看黄免费 | 偷拍自拍网站 | 日韩在线观看 | 亚洲天堂黄色 | 国产精品欧美一区二区 | 天天操天天干天天 | 青娱乐国产视频 | 91夜夜蜜桃臀一区二区三区 | 四虎久久精品 | 日韩免费在线观看视频 | 国产一区二区免费 | 国产免费一区二区三区 | 亚洲精品自在在线观看 | 亚洲一二三区在线观看 | av在线成人 | 国产精品久久国产精品 | 羞羞的视频在线观看 | 国产综合视频在线播放 | 国产在线1 | 久久人人av| 国内精品久久久久国产 | 欧美一区二区精品 | 久久精品这里只有精品 | 久久国产一区 | 男人的天堂在线视频 | 免费观看一区二区三区毛片 | 成人 在线| 一级黄色片aaa | 免费观看电视在线高清视频 | 欧洲一级黄 | 国产精久久久久久久妇剪断 | 国产精品福利视频 | 一区免费视频 | 精品久久97| 日韩素人一区二区三区 | 亚洲三区在线观看 | 国产免费国产 | 成人在线小视频 | 欧美福利一区二区 | 成人av一区二区三区 | 婷婷色国产偷v国产偷v小说 | 日韩一区二区在线电影 | 日韩国产欧美 | 亚洲成人久久久 | 在线观看不卡一区 | 午夜在线视频 | 亚洲精品一区二三区不卡 | 在线观看免费毛片视频 | 成人高清视频在线观看 | 狠狠插狠狠操 | 国产精品有限公司 | 亚洲精品视频在线播放 | 日本一区二区电影 | 一区免费在线观看 | 欧美日韩国产一区二区三区 | 欧美精品区 | 国产精品久久久久久久久久 | 久久涩 | 美国一级黄色片 | 狠狠艹 | av激情在线 | 久久精品亚洲精品国产欧美kt∨ | 亚洲国产日韩在线 | 久久国产精品99精国产 | 天天干一干| 一区二区三区亚洲视频 | 日本免费一区二区三区 | 国产精品一区二区三区四区 | 国产宾馆自拍 | 91在线免费视频 | 99视频在线免费观看 | 2018国产精品 | 亚洲视频一区二区三区 | 久草在线视频免费播放 | 久久精品国产91精品亚洲高清 | 亚洲大奶网 | 日韩在线一区二区三区 | 人人鲁人人莫一区二区三区 | 国产在线第一页 | 羞羞视频网站 | 国产精品美女久久久久久久久久久 | 久久婷婷视频 | 欧美日韩一区二区视频在线观看 | 国产真实精品久久二三区 | 欧美不卡| 国产一区在线视频 | 免费一二区 | 国产免费一区二区 | 日韩国产在线看 | 欧美一区第一页 | 欧美一级欧美三级在线观看 | 成人在线观看免费视频 | 亚洲成人免费 | 欧美亚洲激情 | 久久久蜜臀 | 一区二区国产在线观看 | av毛片| 欧美精品一区二区三区在线四季 | 日韩欧美黄色 | 视频在线亚洲 | 亚洲国产精品久久久久秋霞不卡 | 国产精品久久久久久久久福交 | 午夜小电影 | 岛国av在线 | 在线视频 91 | 国产午夜精品美女视频明星a级 | 国产老女人精品毛片久久 | 亚洲精选免费视频 | 在线视频一区二区 | 涩涩视频在线免费看 | 久久国产精品99久久久久久老狼 | 日韩在线中文字幕 | 午夜精品福利一区二区三区蜜桃 | 国产免费一区二区三区 | 中文字幕_第2页_高清免费在线 | www.久久99| 一区二区三区在线 | 亚州中文字幕蜜桃视频 | 欧美日韩一区二区三区在线观看 | 亚洲精品一区国产精品 | 成人av观看 | www.精品| 日韩精品一区二区三区在线播放 | 日韩免费一区 | 99re视频在线观看 | 午夜精品成人一区二区 | 精品久久久久久久人人人人传媒 | 欧美日韩视频网站 | 久久香蕉网| 吴梦梦到粉丝家实战华中在线观看 | 久久久久久国产 | 婷婷国产成人精品视频 | 亚洲精品久久久久久久久久久久久 | 日本乱偷中文字幕 | 亚洲国产婷婷香蕉久久久久久99 | 成人精品网站在线观看 | 免费观看黄色大片 | 九色av| 午夜视频在线观看网站 | 久草精品视频在线播放 | 免费高潮视频95在线观看网站 | 中文字幕在线视频网站 | 伦乱视频 | 91在线精品一区二区 | 成人免费视频观看视频 | 中文字幕在线免费视频 | 亚洲性在线 | 成年网站在线 | 毛片入口 | 亚洲 欧美 日韩在线 | 久久国产一区 | 成年人av网站 | 成人高清| 山岸逢花在线观看无删减 | 国产欧美精品一区二区色综合朱莉 | 婷婷成人免费视频 | 国产成人 综合 亚洲 | 午夜日韩 | 亚洲精品1 | 99在线精品视频 | 国产精品久久久久久久久免费软件 | 亚洲一区中文 | 久久久精品| 九九热在线免费视频 | 精品99久久 | 九色在线 | 91精品国产一区二区三区免费 | 久久精品久久久 | 中文二区 | 国产三区在线观看视频 | 久久噜噜噜精品国产亚洲综合 | 精品乱子伦一区二区三区 | 色8久久| 国产精品自拍视频网站 | 国产精品视频播放 | 成人免费视频观看视频 | 国产区在线 | 欧美日韩久久久 | a级毛片基地 | 日韩爱爱网 | 日韩三区 | 日韩电影免费在线观看中文字幕 | 91在线精品秘密一区二区 | 亚洲xx视频| 日韩爱爱网址 | 日韩激情视频一区 | 91视频分类 | 欧一区二区 | 欧美日韩一区二区视频在线观看 | 一区二区三区影院 | 成人a级网站 | 成人在线视频播放 | 黄色毛片在线观看 | 国产精品三级在线 | 亚洲xx在线| 亚洲网站在线 | 国产99久久精品 | 女人爽到高潮aaaa电影 | 国产精品毛片一区视频播 | 国产99久久久久久免费看农村 | 国产精品99久久久久久宅男 | 亚洲激情视频在线播放 | 日本久久久久久 | 国产激情午夜 | 国产一在线 | 久草电影网 | 色综合五月婷婷 | 欧美一区二区三区在线视频 | 蜜桃av一区二区三区 | 亚洲视频免费 | 欧美一二三四成人免费视频 | 久久精品福利 | 中文字幕在线免费播放 | 亚洲精品中文字幕在线观看 | 免费国产成人 | 亚洲精品日韩综合观看成人91 | 夜夜av| 91av原创| 国产成人一区 | 久久精品无码一区二区日韩av | 欧美猛交ⅹxxx乱大交视频 | 五月婷婷丁香婷婷 | 亚洲小视频 | 亚洲精品国产二区 | 欧美日韩精品一区二区在线播放 | 欧美一级淫片免费视频黄 | 亚洲欧美综合精品久久成人 | 成人午夜精品一区二区三区 | 怡红院成人影院 | 美国成人在线 | 色5月婷婷丁香六月 | 99精品国产在热久久 | 久久麻豆视频 | 在线激情av | 午夜www | 日本黄色激情片 | 国产高清在线精品一区 | 亚洲精品在线视频 | 国产精品高清一区二区 | 亚洲精品在线网站 | 91久久综合亚洲鲁鲁五月天 | 国产一区二区三区四区视频 | 综合久久综合久久 | 国外成人在线视频网站 | av毛片免费看 | 97久久精品午夜一区二区 | 国产成人精品免高潮在线观看 | 日韩一区二区在线观看 | 国产高清在线精品 | 国产超碰人人模人人爽人人添 | 七龙珠z普通话国语版在线观看 | 91九色最新 | av高清在线看 | 3bmm在线观看视频免费 | 色黄视频在线 | 精品久久久久久久久久久久久久 | 狠狠中文字幕 | 亚洲精品国产第一综合99久久 | 五月天婷婷综合 | 亚洲狠狠爱| 玖玖成人 | 999在线观看精品免费不卡网站 | 欧美在线观看一区 | 国产高清在线精品 | 久久福利 | 国产中文字幕一区 | 亚洲va中文字幕 | 一本色道久久综合狠狠躁篇的优点 | 日日爱夜夜爽 | 国产一区亚洲 | 山岸逢花在线 | 亚洲一区中文 | 国产精品视频在线观看 | 91精品国产色综合久久不卡98口 | 成年入口无限观看网站 | 天天干国产 | 欧美午夜影院 | 99久久婷婷国产综合亚洲 | 97色综合 | 成人av一区二区三区 | 中文字幕91 | 欧美激情精品久久久久久 | 综合久久综合久久 | 欧美一级片免费播放 | 91视频8mav | 操人在线观看 | 97在线超碰 | 成人av电影网址 | 黑人精品xxx一区一二区 | 欧美free性| 国产高清视频一区二区 | 伊人精品视频在线观看 | 日本精品视频在线观看 | 91精品国产综合久久福利软件 | 亚洲综合区 | 国外成人在线视频网站 | 久久99精品久久久久久琪琪 | 亚洲日韩欧美一区二区在线 | 亚洲视频在线观看网站 | 欧美一区久久 | 天天爱天天草 | 国产精品无码永久免费888 | 久久国产亚洲精品 | 国产九九九 | 久久成人综合网 | 在线观看精品自拍私拍 | 精品一区二区三区免费 | 黄色一级大片在线免费看产 | 黄色毛片看看 | 91福利影院在线观看 | 欧美在线观看网站 | 日韩天堂 | 成人午夜视频在线观看 | 精品久久久久久久久久久久 | 欧美乱淫 | 亚洲成人二区 | 成人一区二区三区久久精品嫩草 | 国产一级黄色大片 | 99久久综合 | 国产999精品久久久久 | 成人免费大片黄在线播放 | 天天影视色香欲 | 日韩精品2区 | av色资源| 毛片链接| 成人欧美一区二区三区白人 | 国产精品久久 | 亚洲伦理| 亚洲精品a区 | 人人爱人人草 | 国产成人精品一区二区三区四区 | 成人做爰9片免费视频 | 日韩精品无码一区二区三区 | 免费成人在线观看视频 | 亚洲精品高清视频 | 国产成人精品久久二区二区 | 黑色丝袜脚足j国产在线看68 | 国产中文字幕在线 | 亚洲精品午夜视频 | 天天天天天天天天操 | 国产日韩欧美视频 | 亚洲国产精品99久久久久久久久 | 久久国产综合 | 毛片网站在线 | 好看毛片 | 日本 欧美 三级 高清 视频 | 日韩视频在线观看不卡 | 日本一区二区高清不卡 | 亚洲人人| 亚洲免费视频大全 | 中文字幕在线综合 | 九九视频这里只有精品 | 蜜桃免费视频 | 日韩精品一区二区在线观看 | 黄色成人影视 | 国产精品无码永久免费888 | 国产一区二区精品丝袜 | 久久精品这里热有精品 | 日韩h视频| 天天av天天操 | 亚洲国产精品人人爽夜夜爽 | 国产区视频在线 | 欧美黄色一区 | 国产一区二区精品在线观看 | 国产一区二区三区免费在线观看 | 国产综合精品一区二区三区 | 男人天堂中文字幕 | 久久免费福利视频 | 自拍偷拍专区 | 欧美日韩成人在线视频 | 亚洲精品在线免费看 | 免费成人av在线 | 一区在线观看视频 | 狠狠撸在线视频 | 成人a毛片| 精品久久久久一区二区国产 | 一区二区三区不卡视频 | 午夜影院黄色 | 成人午夜视频在线观看 | 成人午夜免费视频 | 性大毛片视频 | 欧美一级精品片在线看 | 欧美大片一区二区 | 性一交一乱一透一a级 | 日韩免费精品视频 | 男女啪啪高清无遮挡 | 欧美在线一区二区三区 | 日本一区高清 | 日韩视频一区二区三区 | 欧美精品成人一区二区三区四区 | 成人激情视频在线观看 | 欧美视频在线观看一区 | 我要看免费黄色片 | 亚洲精品国产9999久久久久 | 成人国产精品久久 | 亚洲在线视频 | 精品96久久久久久中文字幕无 | 日韩中文字幕在线看 | 毛片视频网站 | 91高清免费看 | 国产精品欧美一区二区三区不卡 | 国产区视频在线观看 | 91亚洲高清 | 国产老女人精品毛片久久 | 狠狠操夜夜操天天操 | 精品国产乱码久久久久久1区2区 | 午夜免费福利视频 | 日韩欧美在| 午夜精品久久久久久久白皮肤 | 性色爽爱 | 午夜精品视频 | 精品一区二区三区在线观看 | 成人免费视频网站在线看 | 亚洲成人免费网址 | 日韩精品一区二区三区视频播放 | 亚洲男人天堂 | 成人欧美亚洲 | 亚洲综合天堂网 | 91色在线观看 | 日韩中文视频 | 欧美一卡二卡在线观看 | 精品久| 在线草| 欧美一区亚洲二区 | 色黄网站| 福利精品在线观看 | 亚洲国产成人久久 | 亚洲精品免费视频 | www四虎com| 国产精品久久久久久久久免费 | 午夜激情免费在线观看 | 91网站免费 | 久久久久久免费精品 | 综合天天| 91麻豆精品一二三区在线 | 久久91精品 | 午夜视频免费网站 | 久久免费视频观看 | 理论片87福利理论电影 | 久久亚洲精品国产精品紫薇 | 成人区一区二区三区 | 久久免费在线观看 | 国产精品国产精品国产专区不片 | 91精品久久久久久久久久久 | 一区日韩 | 欧美1区| 伊人精品 | 不卡一区二区三区四区 | 国产无套一区二区三区久久 | 国产日韩欧美在线 | 国产免费一区二区三区 | 一区二区三区四区在线播放 | 综合在线视频 | 探花在线观看 | 日本在线观看 | 午夜资源 | 伊人久久婷婷 | 精品www | 亚洲视频综合 | 日本末发育嫩小xxxx | av观看| 国产精品美女久久久久久久久久久 | 国产富婆一级全黄大片 | 精品久久久久久 | 在线中文视频 | 国产免费看 | 欧美久久免费观看 | www久久久久久久 | yy6080久久伦理一区二区 | 亚洲一区久久 | 国产精久久一区二区三区 | 成人av免费观看 | 亚洲精品一二三 | 中文字幕视频在线观看 | av网站免费观看 | 欧美a在线 | 国产不卡一区 | 中文字幕av第一页 | 中文字幕一区二区三区在线视频 | 国产精品日韩欧美一区二区三区 | 欧美video | 亚洲自拍在线观看 | 思九九爱九九 | 国产欧美精品区一区二区三区 | va在线| 国产精品久久久久久婷婷天堂 | 一本大道综合伊人精品热热 | 日韩在线视频一区 | 日韩在线精品强乱中文字幕 | 天天干狠狠操 | 精品久久网 | 亚洲精品女人久久 | 成人在线免费视频 | av一区二区三区四区 | 91xx在线观看 | 欧美日韩国产精品 | 成年人黄色一级毛片 | 色视频网站在线观看 | 一区二区在线 | 一本一道久久a久久精品综合蜜臀 | 狠狠操狠狠操 | 成人免费黄色小视频 | 国产精品国产三级国产aⅴ 羞羞的视频在线 | 在线观看国产www | 日韩免费网站 | 免费三级电影网站 | 91免费看| 精品一区二区三区国产 | 在线观看毛片网站 | 欧美一级片在线 | 中文字幕视频网站 | 吊视频一区二区三区 | 亚洲视频一 | 欧美一区永久视频免费观看 | 黄色av毛片 | 国产精品久久久久久久久久东京 | 成人免费视频观看视频 | 欧美一区二区三区国产精品 | 国产一区二区免费视频 | 亚洲天堂一区 | 日韩福利影院 | 成人影院www在线观看 | 欧洲一级黄 | www.日韩av.com | www.国产视频 | 91久久国产精品 | 99精品在线| 男女视频在线免费观看 | 欧美精品网站 | 国产成人精品一区二区 | 欧美激情视频一区二区三区在线播放 | 丁香婷婷久久久综合精品国产 | 日韩一区二区中文字幕 |