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

「深入淺出」實現JSX的轉換

開發 前端
當我們在項目中使用 React 構建界面時,主要使用的就是 React 包。它提供了開發者需要的所有API。如React.Component、React.createElement、React.useState等等,所以它也是大多數 React 項目的基礎。

前言

由于近期在看React框架源碼、底層實現方面的知識,所以想把學習心得整理出來。

這也是一個新的系列「從0實現React 18核心模塊」的第一篇。

接下來還會更新:render、commit階段的實現,以及Hooks架構、useState、useEffect、單雙節點Diff的過程還有React 18中的并發更新原理。

在看文章之前,我們可以先想幾個問題:

  • JSX 是什么語法?
  • JSX 有什么優勢,它的轉換規則是什么或者它內部是如何實現的?
  • 既然 React 一直在使用 JSX,那它的實現被寫應該寫在哪個包里(比如react、react-dom,react-reconciler)?
  • 在React 17之前和React 17之后,JSX轉換的方法實現有哪些異同?
  • 如何實現React.createElement方法和運行時的 jsx 方法?
  • 寫一個Demo引入自己實現的jsx方法,看看運行結果

下文提到的 big-react 是從0到1實現的React的核心功能模塊原理的項目

如果自己實現一個 React 框架,它需要包含哪些內置的包:

  • react包是 React 的核心庫,提供了創建和管理組件所需的基本功能(比如組件創建、組件生命周期管理、虛擬DOM以及Hooks等),主要是一些和宿主環境無關的方法。
  • react-reconciler包實現了 React 的 reconciliation 協調算法,是一種核心優化策略的實現,主要自定義協調器的實現。以及在不同的平臺或環境中使用 React。
  • shared包是big-react公用的輔助方法,和宿主環境無關。

如果還有一個必要的包,那就是react-dom:

  • react-dom:這個包提供了將 React 與 DOM(瀏覽器環境)集成的方法。它包含了用于將 React 組件渲染到 DOM 中的 ReactDOM.render() 函數,以及其他與瀏覽器環境相關的實用功能。對于在瀏覽器中運行的 React 應用程序,react-dom 是必需的。

react與react-reconciler包是什么

react包為我們提供了什么

當我們在項目中使用 React 構建界面時,主要使用的就是 react? 包。它提供了開發者需要的所有API。如React.Component、React.createElement、React.useState等等,所以它也是大多數 React 項目的基礎。

react-reconciler包實現了什么?

react-reconciler包是一個更底層、更高級的庫,它實現了reconciliation協調算法,reconciliation是 React 的一種核心優化策略,用于在更新組件時比較虛擬DOM樹的差異,并將實際更改應用到實際的DOM樹。這有助于提高性能,因為避免了不必要的DOM操作。

它主要用于創建自定義渲染器,以及在不同的平臺中去使用 React。例如,react-dom(用于Web平臺)和react-native(用于移動應用)都使用react-reconciler作為底層庫,實現了針對各自平臺的渲染邏輯。

JSX 是什么

const element = <div className="container">Hello, world!</div>;

在React中,JSX是一種JavaScript語法擴展,允許你在JavaScript代碼中編寫類似HTML的標記。要使用JSX,需要在構建過程中將其轉換為標準的JavaScript代碼。

通常,這個轉換過程包括兩個主要部分:

  • 編譯時:通常指將 JSX 語法轉換為瀏覽器可以理解的普通 JavaScript 代碼的過程,這個過程通常由 Babel 完成。
  • 構建時:在將JSX語法轉換為標準的JavaScript代碼后,通常會使用構建和打包工具(如Webpack、Rollup)對代碼進行優化、壓縮和打包。打包工具將源代碼和依賴項組合成一個或多個文件(“bundles”或“chunks”),用于在瀏覽器中運行。
  • 運行時:React會根據編譯后的代碼創建虛擬DOM樹,然后將其渲染到實際的DOM中。還會發生的階段有狀態管理和更新、事件處理和Diff算法的比較等。

JSX 被 Babel 編譯成了什么

在React 17之前,JSX語法會被編譯成React.createElement函數的調用,用來創建虛擬DOM元素。

轉換結果如下:

const element = React.createElement(
"div",
{ className: "container" },
"Hello, world!"
);

從React 17開始,引入了新的JSX轉換功能,稱為"Runtime Automatic"(自動運行時)。這意味著在使用JSX語法時,不再需要手動引入React庫。在自動運行時模式下,JSX會被轉換成新的入口函數,import {jsx as _jsx} from 'react/jsx-runtime'; 和 import {jsxs as _jsxs} from 'react/jsx-runtime';。

轉換結果如下:

import { jsx as _jsx } from "react/jsx-runtime";

const element = _jsx("div", {
className: "container",
children: "Hello, world!"
});

接下來我們就來實現jsx方法或React.createElement方法(包括dev、prod兩個環境)。

工作量包括:

  • 實現jsx方法
  • 實現打包流程
  • 實現調試打包結果的環境

實現 jsx 轉換方法

jsx 轉換方法包括:

  • React.createElement方法
  • jsxDEV方法(dev環境)
  • jsx方法(prod環境)

實現React.createElement

在React 17之前,JSX轉換應用的是createElement方法,下面是它的實現:

/**
*
* @param type 元素類型
* @param config 元素屬性,包括key,不包括子元素children
* @param maybeChildren 子元素children
* @returns 返回一個ReactElement
*/
const createElement = (
type: ElementType,
config: any,
...maybeChildren: any
) => {
// reactElement 自身的屬性
let key: Key = null;
let ref: Ref = null;

// 創建一個空對象props,用于存儲屬性
const props: Props = {};

// 遍歷config對象,將ref、key這些ReactElement內部使用的屬性提取出來,不應該被傳遞下去
for (const prop in config) {
const val = config[prop];
if (prop === 'key') {
if (val !== undefined) {
key = '' + val;
}
continue;
}
if (prop === 'ref') {
if (val !== undefined) {
ref = val;
}
continue;
}
// 去除config原型鏈上的屬性,只要自身
// 一般使用{...props}將所有屬性都傳遞下去,所以摘除ref、key屬性外需要被保存到props中
if ({}.hasOwnProperty.call(config, prop)) {
props[prop] = val;
}
}

const maybeChildrenLength = maybeChildren.length;
if (maybeChildrenLength) {
// [child] [child, child, child]
if (maybeChildrenLength === 1) {
props.children = maybeChildren[0];
} else {
props.children = maybeChildren;
}
}

return ReactElement(type, key, ref, props);
};

注意:React.createElement方法和jsx方法的區別這里只體現在第三個參數上。

實現jsx方法

從React 17之后,JSX轉換應用的是jsx方法,下面是它的實現:

/**
*
* @param type 元素類型
* @param config 元素屬性
* @param maybeKey 可能的key值
* @returns 返回一個ReactElement
*/
const jsx = (type: ElementType, config: any, maybeKey: any) => {
// 初始化key和ref為空
let key = null;
let ref = null;

// 創建一個空對象props,用于存儲屬性
const props: Props = {};

// 遍歷config對象,將ref、key這些ReactElement內部使用的屬性提取出來,不應該被傳遞下去
for (const prop in config) {
const val = config[prop];
if (prop === "key") {
continue;
}
if (prop === "ref") {
if (val !== undefined) {
ref = val;
}
continue;
}
// 一般使用{...props}將所有屬性都傳遞下去,所以摘除ref、key屬性外需要被保存到props中
if ({}.hasOwnProperty.call(config, prop)) {
props[prop] = val;
}
}

// 將 maybeKey 添加到 key 中
if (maybeKey !== undefined) {
key = "" + maybeKey;
}

return ReactElement(type, key, ref, props);
};

這段代碼定義了一個jsx函數,主要用于創建React元素。首先,它會提取可能存在的key和ref屬性,并將剩余屬性添加到一個新的props對象中。最后用ReactElement函數創建一個React元素并返回。

從上面代碼中可以看到還實現了ReactElement方法:

// jsx-runtime.js
const supportSymbol = typeof Symbol === 'function' && Symbol.for;

// 為了不濫用 React.elemen,所以為它創建一個單獨的鍵
// 為React.element元素創建一個 symbol 并放入到 symbol 注冊表中
export const REACT_ELEMENT_TYPE = supportSymbol
? Symbol.for('react.element')
: 0xeac7;

export const ReactElement = function (type, key, ref, props) {
const element = {
$$typeof: REACT_ELEMENT_TYPE,
type,
key,
ref,
props,
_mark: 'lsh',
};
return element;
};

export const jsx =...

用自己實現的的jsx接入Demo

我們試著把自己實現的jsx方法,創建一個ReactElement,看它是否能夠渲染在頁面上。

圖片

實現jsx方法

jsx-Demo運行地址

jsx方法和createElement的區別

jsx函數和createElement函數都用于在React中創建虛擬DOM元素,但它們的語法和用法有所不同。jsx函數來自于React 17及更高版本中的新的JSX轉換功能,稱為"Runtime Automatic"。

以下是兩者之間的主要區別:

  1. 語法和轉換方式:jsx函數用于處理新的JSX轉換方式,其語法更簡潔。createElement函數用于處理傳統的JSX轉換方式。

例如,一個JSX元素:

const element = <div className="container">Hello, world!</div>;

使用createElement轉換后的代碼如下:

const element = React.createElement(
"div",
{ className: "container" },
"Hello, world!"
);

使用jsx函數(自動運行時)轉換后的代碼如下:

import { jsx as _jsx } from "react/jsx-runtime";

const element = _jsx("div", { className: "container", children: "Hello, world!" });
  1. ?子元素和key值處理:jsx函數將子元素作為屬性(children)傳遞,而createElement函數將子元素作為額外的參數傳遞。同時子元素上的key值在jsx函數中也會以第三個參數的形式傳遞,而在createElement函數中,則是存在于config第二個參數中。

在createElement函數中:

React.createElement("div", {className: "app", key: "appKey"}, "hello,app");

在jsx函數中:

import { jsx as _jsx } from "react/jsx-runtime";

_jsx("div", {className: "app", children: "hello,app"}, "appKey");
  1. ?兼容性和版本:createElement函數在所有React版本中可用,而jsx函數僅在React 17及更高版本中提供。盡管React團隊推薦使用新的JSX轉換方式,但許多現有項目可能仍在使用createElement函數。

這時可能產生兩個疑問:

  • 從React 17之后使用Runtime Automatic自動運行時有什么好處?
  1. 簡化組件代碼:不再需要在每個組件文件頂部添加**import React from 'react';**。這使得組件代碼更簡潔,更易于閱讀和維護。
  2. 節省包大小:由于不再需要導入整個React對象,構建工具可以更好地優化輸出代碼,從而減小輸出包的大小。
  • 改成jsx函數后,為什么要把key屬性單獨拿出來放在第三個參數?

在之前的React版本中,每當創建一個新的React元素時,React都需要從屬性對象中提取key?和ref,這會導致額外的性能開銷。

將key?作為單獨的參數傳遞,可以讓React在處理虛擬DOM樹時更容易地訪問key,無需每次都從屬性對象中查找。這有助于提高React的性能和效率,特別是在處理大量元素和復雜組件樹時。

實現打包流程

打包流程稍微有些復雜,后續寫到文章里。

簡單來說就是使用 Rollup,將編寫jsx方法的文件打包出來,通過pnpm link --global的方式生成一個全局的react包,這樣就可以通過pnpm link react --global調試自己創建的 create-react-app demo項目了。

圖片

構建react包思路

責任編輯:姜華 來源: 前端時光屋
相關推薦

2021-04-27 08:54:43

ConcurrentH數據結構JDK8

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2019-11-11 14:51:19

Java數據結構Properties

2009-11-30 16:46:29

學習Linux

2022-12-02 09:13:28

SeataAT模式

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構調度器

2012-05-21 10:06:26

FrameworkCocoa

2021-07-20 15:20:02

FlatBuffers阿里云Java

2022-09-26 09:01:15

語言數據JavaScript

2009-12-25 15:49:43

Linux rescu

2019-11-14 09:53:30

Set集合存儲

2022-11-09 08:06:15

GreatSQLMGR模式

2018-11-09 16:24:25

物聯網云計算云系統

2009-11-18 13:30:37

Oracle Sequ

2022-10-31 09:00:24

Promise數組參數

2012-02-21 13:55:45

JavaScript

2019-12-04 10:13:58

Kubernetes存儲Docker

2022-01-11 07:52:22

CSS 技巧代碼重構
點贊
收藏

51CTO技術棧公眾號

麻豆成人综合网| 亚洲第一二区| 中文字幕在线一区| 亚洲一区二区三区成人在线视频精品 | 怡红院在线播放| 成人18视频日本| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产人妻黑人一区二区三区| 高清不卡亚洲| 亚洲精品乱码久久久久| 鲁鲁狠狠狠7777一区二区| 911美女片黄在线观看游戏| 黑丝一区二区三区| 一本色道久久88综合亚洲精品ⅰ| 亚洲AV无码久久精品国产一区| 午夜伦理福利在线| 日韩毛片视频在线看| 久久99精品久久久久久三级 | 亚洲成人黄色网址| 日本 片 成人 在线| 男女免费观看在线爽爽爽视频| 久久看人人爽人人| 成人欧美一区二区三区视频xxx| 中文字幕av第一页| 99精品国产一区二区青青牛奶| 日韩最新中文字幕电影免费看| 久久午夜夜伦鲁鲁片| 国产精品日本一区二区三区在线 | a网站在线观看| 日韩中文字幕1| 98精品国产自产在线观看| 极品久久久久久| 久久高清免费| 国产一区二区黄| 少妇饥渴放荡91麻豆| 欧美日韩黄色| 欧美一区二区免费观在线| 亚洲一级片网站| 二区三区不卡| 欧美色videos| 国产一区二区在线视频播放| 青青在线视频| 一区二区三区四区高清精品免费观看 | 亚洲天堂第一区| 特级西西444www大胆免费看| 一区二区三区四区在线观看国产日韩| 日韩限制级电影在线观看| 国产男女在线观看| 日本三级在线观看网站| 欧美经典一区二区| 裸模一区二区三区免费| a毛片在线免费观看| 久久激情五月激情| 国产成人中文字幕| 成人毛片在线播放| 99精品国产一区二区青青牛奶| 久久久精品视频成人| 少妇大叫太粗太大爽一区二区| 一区中文字幕| 欧美一卡在线观看| 亚洲午夜激情影院| 亚洲精品伦理| 欧美日韩一卡二卡三卡| 激情婷婷综合网| 免费观看亚洲| 日韩欧美a级成人黄色| 妞干网视频在线观看| 在线免费av导航| 亚洲欧美一区二区三区孕妇| 影音先锋在线亚洲| 日韩精品成人av| 中文字幕一区二区三| 久久久久久国产精品一区| 风流少妇一区二区三区91| 国产成人日日夜夜| 国产欧美日韩丝袜精品一区| 波多野结衣电车痴汉| 久久精品成人| 国产精品电影观看| 又骚又黄的视频| 青青草成人在线观看| 国产日韩欧美影视| a级片免费视频| 丁香婷婷综合色啪| 精品国产乱码一区二区三区四区 | 免费看日韩精品| 国产一区二区丝袜高跟鞋图片| 亚洲最新av网站| 激情综合色播五月| 91情侣在线视频| 色婷婷视频在线| 26uuu亚洲婷婷狠狠天堂| 欧美日韩国产精品一卡| 黄网在线免费| 久久久久久黄色| 亚洲一区二区三区免费看| 麻豆av在线免费观看| 日韩欧美精品免费在线| 天天色综合社区| 精品国产亚洲日本| 亚洲国产精品久久久久秋霞不卡 | 亚洲人午夜精品免费| 岛国片在线免费观看| 亚洲视频电影在线| 欧美极品少妇xxxxⅹ裸体艺术| 青青青国产在线| 狠狠狠色丁香婷婷综合激情| 成人欧美一区二区| 国产最新视频在线| 一区二区三区精品在线观看| ww国产内射精品后入国产| 日韩av超清在线观看| 欧美一区欧美二区| 极品白嫩丰满美女无套| 五月精品视频| 欧洲亚洲妇女av| 国产免费黄色大片| 不卡视频一二三四| 亚洲区成人777777精品| 韩国成人漫画| 日韩午夜在线影院| 欧美性猛交xxxx乱| 影音先锋中文字幕一区二区| 国产精品看片资源| 天天操天天干天天爽| 最好看的中文字幕久久| a在线视频观看| 国产在线不卡一区二区三区| 精品亚洲一区二区| 欧美偷拍第一页| 国产亚洲毛片| 国产99在线播放| 99reav在线| 欧美日韩国产色视频| 亚洲男人天堂2021| 精品国内自产拍在线观看视频| 欧美福利在线观看| 国产精品一区二区黑人巨大| 国产午夜精品理论片a级大结局 | 国产精品一区二区入口九绯色| 色呦哟—国产精品| 日本高清视频精品| 99久久婷婷国产一区二区三区| 国产精品美女久久福利网站| 黄色影院一级片| 99国产精品久久一区二区三区| 中文字幕亚洲综合| 中文字幕手机在线视频| 99精品视频一区| 精品国产一区二区三区无码| 视频91a欧美| 在线播放国产一区二区三区| 久久久精品免费看| 99久久精品免费看| 国产无限制自拍| 九九99久久精品在免费线bt| 久久视频中文字幕| 亚洲最新av网站| 国产精品入口麻豆原神| 超碰在线97免费| 精品久久精品| 国产精品aaaa| 国产视频三级在线观看播放| 欧美午夜精品久久久久久久| 国产视频久久久久久| 亚洲黄页一区| 97se亚洲综合在线| 日本片在线看| 亚洲高清免费观看高清完整版| 久久人人爽人人爽人人| 国产 日韩 欧美大片| 免费观看亚洲视频| 成人动漫视频| 18一19gay欧美视频网站| 手机看片福利永久| 欧美日韩国产一中文字不卡| 亚洲欧美日本一区| 视频在线在亚洲| 视频一区视频二区视频三区视频四区国产| 午夜av不卡| zzjj国产精品一区二区| 精品人妻一区二区三区换脸明星 | 日本不卡一区视频| 精品一区二区三区香蕉蜜桃| 青青视频免费在线观看| 超碰成人在线免费| 日韩av三级在线观看| 国产三级在线观看| 538prom精品视频线放| 欧美另类视频在线观看| 99久久精品国产导航| 苍井空浴缸大战猛男120分钟| 少妇精品久久久一区二区三区| 51精品国产黑色丝袜高跟鞋 | 国产精品自拍网站| 久操网在线观看| 97久久综合区小说区图片区| 久久久久久一区二区三区| 青青草视频在线免费观看| 色偷偷88欧美精品久久久| 搜索黄色一级片| av综合在线播放| 91香蕉视频导航| 午夜精品久久久久99热蜜桃导演| 爱情岛论坛亚洲入口| 成人福利av| 在线成人中文字幕| 一区二区www| 精品成人在线视频| 美国一级片在线观看| 成av人片一区二区| 亚洲视频第二页| 亚洲乱码视频| 中文字幕一区二区三区5566| 噜噜噜天天躁狠狠躁夜夜精品 | 久草视频在线免费| 亚洲午夜激情网页| 亚洲精品视频网址| jlzzjlzz亚洲日本少妇| 亚洲va综合va国产va中文| 亚洲国产美女| avove在线观看| 成人免费看片39| 97se在线视频| 亚洲国产伊人| 国产精品美女av| 国产高潮在线| 精品国产一区二区三区久久| 国产香蕉在线| 亚洲精品第一国产综合精品| 国产又粗又猛又黄| 欧美日韩视频免费播放| 国产这里有精品| 中文字幕成人网| a级在线观看视频| 国产成人午夜视频| 国产免费中文字幕| 日韩av在线免费观看不卡| 黑鬼大战白妞高潮喷白浆| 在线看片一区| 99热这里只有精品免费| 欧美成人激情| 日韩亚洲视频在线| 米奇777超碰欧美日韩亚洲| 国产精品视频入口| av综合网址| 99久久精品无码一区二区毛片| 国产亚洲人成a在线v网站| 日本电影亚洲天堂| 亚洲三级欧美| 7m第一福利500精品视频| 大香伊人中文字幕精品| 欧美成人午夜激情| 黄色av电影在线观看| 日韩精品福利在线| 黄色www视频| 日韩精品一区在线观看| 亚洲av无码乱码在线观看性色| 制服丝袜成人动漫| 国产人妻精品一区二区三| 这里只有精品99re| 中文字幕一区二区人妻| 欧美日韩大陆一区二区| 亚洲综合五月天婷婷丁香| 精品视频在线视频| 在线观看毛片视频| 欧美日韩国产bt| 在线视频免费观看一区| 欧美日韩mp4| 国产伦一区二区| 欧美美女喷水视频| 精品国产乱码一区二区三 | 三年中国国语在线播放免费| 奇米色一区二区三区四区| 欧美一级特黄a| 欧美aⅴ一区二区三区视频| 伊人影院综合在线| 久久精品国产精品亚洲精品| 另类小说第一页| 国产在线国偷精品产拍免费yy| 性鲍视频在线观看| 成人国产在线观看| 加勒比综合在线| 国产精品入口麻豆原神| 激情五月婷婷在线| 欧美午夜视频一区二区| 波多野结衣一本一道| 欧美美女一区二区| 视频污在线观看| 亚洲视频777| 在线观看免费视频你懂的| 欧美黄色三级网站| 欧美日韩免费看片| 成人在线播放av| 高清日韩中文字幕| 神马欧美一区二区| 99国产精品免费视频观看| 成品人视频ww入口| 日韩中文字幕区一区有砖一区| 99sesese| 91老司机福利 在线| 九九热久久免费视频| 亚洲综合色婷婷| 亚洲自拍一区在线观看| 日韩免费观看高清完整版| 色就是色亚洲色图| 日韩在线观看免费av| 电影在线观看一区| 成人中文字幕+乱码+中文字幕| 国产精品一区二区三区美女| 欧美日韩一区二区视频在线 | 精品国产精品一区二区夜夜嗨| 好吊色一区二区| 日韩有码片在线观看| av老司机在线观看| 国产精品亚洲网站| 欧美顶级毛片在线播放| 在线视频精品一区| 国产亚洲在线观看| 黄色av电影网站| 国产精品国产三级国产专播品爱网| 精品视频久久久久| 欧美日韩mp4| 免费一级在线观看播放网址| 欧美极品少妇与黑人| 日韩国产激情| 久久er99热精品一区二区三区 | 日韩精品一区二区三区四区| 免费在线观看一级毛片| 欧美精品videos性欧美| 亚洲成人a级片| 日本最新一区二区三区视频观看| 欧美精品三区| 热久久久久久久久| 久久九九影视网| 九一国产在线观看| 日韩免费视频一区二区| 免费黄色网址在线观看| 国产精品久久久久久婷婷天堂| 久久夜色电影| 免费看欧美黑人毛片| 国产99精品在线观看| 天堂网avav| 欧美精品一卡二卡| 91欧美在线视频| 国产成人精品电影久久久| 日韩人体视频| 欧美一级在线看| 成人国产精品免费网站| 91看片在线播放| 亚洲成人av片在线观看| 毛片在线网址| 国产精品久久久久久久久婷婷| 欧美成人一品| 免费不卡av网站| 亚洲一区二区三区小说| 精品久久久中文字幕人妻| 久久天天躁狠狠躁夜夜躁| **日韩最新| 麻豆映画在线观看| 国产乱妇无码大片在线观看| 色欲AV无码精品一区二区久久| 欧美性猛交xxxxxxxx| 91caoporn在线| 国产一区香蕉久久| 天天色综合色| 色综合五月婷婷| 亚洲精品美腿丝袜| 亚洲AV午夜精品| 91精品国产一区| 亚洲素人在线| 国产三级日本三级在线播放| 欧美韩国日本一区| 国产精品美女一区| 久久久久久久久国产精品| 高清精品视频| 欧美精品色婷婷五月综合| 久久久精品国产免大香伊| 中文在线免费观看| 久久精品国产成人| 国产精品色呦| 性生交免费视频| 亚洲婷婷在线视频| 国产 欧美 精品| 欧美自拍视频在线| 日韩久久久久| 亚洲免费成人在线视频| 午夜电影久久久| 国产高清在线| 91最新国产视频| 国产欧美一区二区色老头| 一区二区精品免费| 欧美日韩视频在线第一区| 麻豆91在线| 高清一区二区三区视频| 视频在线在亚洲| 黄色在线观看免费| 亚洲男人天堂视频| 24小时成人在线视频| 欧美激情精品久久久久久小说|