国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

幾天不寫React,已經(jīng)看不懂語法了

開發(fā) 前端
真是幾天不寫React,語法都看不懂了。本文就來聊聊這幾個Use關(guān)鍵詞各自的意義。

大家好,我卡頌。

下面這個React組件代碼,用到3個use關(guān)鍵詞,你理解他們的作用嗎?

'use client'

function App() {
  using data = use(ctx);
  
  // ...
}

真是幾天不寫React,語法都看不懂了。本文就來聊聊這幾個use關(guān)鍵詞各自的意義。

use client

首先是位于代碼頂部的'use client'聲明,使用方式類似于嚴(yán)格模式的聲明:

'use strict';
// 此處是嚴(yán)格模式下的JavaScript代碼

'use client'聲明是RSC(React Server Component,服務(wù)端組件)協(xié)議中的定義。

啟用了RSC的React應(yīng)用,所有組件默認在服務(wù)端渲染(可以通過Next v13體驗),只有聲明'use client'的組件文件,會在前端渲染。

假設(shè)我們的React應(yīng)用組件結(jié)構(gòu)如下,其中紅色代表「服務(wù)端組件」,藍色代表「客戶端組件」(聲明'use client'):

那么當(dāng)應(yīng)用打包后,D、E組件會打包成獨立文件。在前端,React可以直接渲染A、B、C組件。但是對于D、E,需要以JSONP的形式請求回組件代碼再渲染。

完整執(zhí)行邏輯如下:

using關(guān)鍵字

接下來是data變量前的using關(guān)鍵字:

using data = use(ctx);

using關(guān)鍵字是tc39提案ECMAScript Explicit Resource Management[1]提出的,用于為各種資源(內(nèi)存、I/O等)提供統(tǒng)一的生命周期管理(何時分配、何時釋放等)。

同時,TS v5.2率先引入了這個關(guān)鍵字。所以,接下來的講解我們以TS中的using關(guān)鍵詞為準(zhǔn)。

using的作用有點類似useEffect的destroy函數(shù)。當(dāng)我們在useEffect的create函數(shù)綁定了事件后,可以在destroy函數(shù)解綁:

function App() {
  useEffect(() => {
    console.log('這里是create函數(shù)')
    return () => {
      console.log('這里是destroy函數(shù)')
    }
  }, [])
}

類似的,當(dāng)我們通過using關(guān)鍵詞聲明一個包含[Symbol.dispose]方法的對象后,當(dāng)離開當(dāng)前作用域時,聲明的[Symbol.dispose]方法會執(zhí)行:

{
  const getResource = () => {
    return {
      [Symbol.dispose]: () => {
        console.log('離開啦!')
      }
    }
  }
  using resource = getResource();
}
// 代碼執(zhí)行到這里會打印 離開啦!

在[Symbol.dispose]方法內(nèi)主要執(zhí)行一些釋放資源的操作。

比如,當(dāng)我們操作數(shù)據(jù)庫時,如果要考慮「操作完斷開數(shù)據(jù)庫連接」,可能會寫出如下代碼:

const db = await connectDB();
try {
  // 執(zhí)行數(shù)據(jù)庫操作
} finally {
  // 斷開數(shù)據(jù)庫連接
  await db.close();
}

如果使用using關(guān)鍵詞,代碼如下:

const connect = async () => {
  const db = await connectDB();
  return {
    db,
    [Symbol.asyncDispose]: () => db.close()
  };
};

// 使用
{
  using { db } = await connect();
  // 執(zhí)行數(shù)據(jù)庫操作
} 
// 離開作用域自動斷開連接

配合async await使用,可以降低「由于忘記釋放資源造成內(nèi)存泄漏」的可能性。

use方法

最后是React v18.3之后發(fā)布的新原生hook —— use:

using data = use(ctx);

這個hook可以接收兩種類型數(shù)據(jù):

  • React Context

此時use的作用與useContext一樣。

  • promise

此時如果這個promise處于pending狀態(tài),則最近一個祖先<Suspense/>組件可以渲染fallback。

比如,在如下代碼中,如果<Cpn />組件或其子孫組件使用了use,且promise處于pending狀態(tài)(比如請求后端資源):

function App() {
  return (
    <div>
      <Suspense fallback={<div>loading...</div>}>
        <Cpn />
      </Suspense>
    </div>
  );
}

那么,頁面會渲染如下結(jié)果:

<div>
  <div>loading...</div>
</div>

當(dāng)請求成功后,會渲染<Cpn />。

總結(jié)

對于開篇提到的代碼:

'use client'

function App() {
  using data = use(ctx);
  
  // ...
}

表示:

  • 這是個客戶端組件
  • 如果傳遞給use的變量ctx是React Context,則use的作用等同于useContext。
  • 如果傳遞給use的變量ctx是promise,則配合最近的<Suspense/>使用。
  • 如果use的返回值包含[Symbol.dispose],則App組件render完成后會執(zhí)行[Symbol.dispose]方法。

一個文件,三款use相關(guān)語法,你是不是已經(jīng)懵逼了呢?

參考資料

[1]ECMAScript Explicit Resource Management:https://github.com/tc39/proposal-explicit-resource-management。

責(zé)任編輯:姜華 來源: 魔術(shù)師卡頌
相關(guān)推薦

2021-12-09 11:59:49

JavaScript前端提案

2020-03-30 16:45:06

代碼看不懂

2019-12-09 08:29:26

Netty架構(gòu)系統(tǒng)

2020-03-06 11:30:08

JavaGitHub編程

2022-12-12 07:40:36

服務(wù)器項目Serverless

2013-07-08 10:49:03

程序員代碼看懂代碼

2022-07-26 14:38:08

JavaScriptWeb安全自動化

2022-06-16 14:07:26

Java代碼代碼review

2021-02-23 10:36:09

Linux命令kmdr

2022-02-07 09:05:00

GitHub功能AI

2014-03-12 09:25:33

產(chǎn)品經(jīng)理Startup

2025-09-08 18:08:28

AIClockBenchAGI

2017-09-19 15:45:39

2020-11-06 08:36:04

UI設(shè)計規(guī)范iOS

2020-09-21 13:06:58

TikTok網(wǎng)絡(luò)安全隱私

2017-06-16 09:22:22

數(shù)據(jù)結(jié)構(gòu)算法鏈表

2019-10-24 08:56:38

語言代碼Java

2022-01-05 09:40:03

DIff算法前端

2023-06-06 07:41:00

Reacthook

2021-10-08 08:58:35

物聯(lián)網(wǎng)通信發(fā)布者
點贊
收藏

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

影音先锋在线影院| 四虎免费av| 97影院理论午夜| 日韩av一二三四| 欧美最大成人综合网| 免费网站在线观看视频| 男人天堂999| 少妇一级淫免费放| 亚洲私人影吧| 人人超在线公开视频| 超鹏97在线| 国产精品日本一区二区三区在线 | 精品久久久三级丝袜| 精品久久久久99| 欧美成人免费大片| 国产在线999| 麻豆一区区三区四区产品精品蜜桃| 300部国产真实乱| 免费男女羞羞的视频网站主页在线观看 | 久久香蕉国产线看观看99| 欧美午夜精品久久久| 99在线影院| 成人网址大全| 成人福利在线| 欧美激情极品| 99久久99久久免费精品蜜臀| 欧美日韩国产成人在线免费| 欧美人与性动交a欧美精品| 亚洲激情一区二区三区| 91影院成人| 热草久综合在线| 欧美一区二区三区在线播放| eeuss在线播放| jizz内谢中国亚洲jizz| 亚洲女同在线| 欧美日韩加勒比精品一区| 日韩三级高清在线| 国产精品免费视频xxxx| 日韩伦理在线免费观看| 免费高清完整在线观看| 日韩在线精品| 亚洲午夜在线观看视频在线| 久久免费精品视频| 无遮挡又爽又刺激的视频| 电影天堂国产精品| 欧美精品一卡| 色综合天天性综合| 欧美午夜性视频| 天天综合狠狠精品| 性xxxx丰满孕妇xxxx另类| 99伊人成综合| 精品国产成人在线影院| 日韩精品一区二区三区视频在线观看 | 色七七影院综合| 999精品视频在线| 国产精品久久久久久久免费观看 | 视频在线观看免费影院欧美meiju| 中文字幕乱码亚洲精品一区| 国产欧美精品久久久| 成人三级高清视频在线看| 99v久久综合狠狠综合久久| 欧美一区二区三区免费视| 在线播放毛片| 95精品视频在线| 91免费在线视频| 天堂√中文最新版在线| 亚洲视频一区在线| 欧美精品一区在线发布| 精品人人人人| 日韩区在线观看| 91黑丝在线| 精品亚洲aⅴ乱码一区二区三区| 国产91精品久久久久久久| 怡红院红怡院欧美aⅴ怡春院| 日本一区二区高清| 日韩精品久久一区二区三区| 韩国97影院| 欧美综合一区| 亚洲精品自拍视频| 日韩在线免费看| www.亚洲国产| 国偷自产av一区二区三区小尤奈| 日本一区二区三区播放| 亚洲的天堂在线中文字幕| 天海翼一区二区三区免费| 99久久精品免费| 亚洲一区二区三区精品在线观看 | 日韩美女毛茸茸| 亚洲日本在线观看视频| 欧美绝品在线观看成人午夜影视| av小说在线| 国产精品性做久久久久久| 成人91免费视频| 国产一区二区三区不卡av| 亚洲精品小视频| 日韩毛片久久久| 亚洲高清免费在线| 黄色av免费在线播放| 国产河南妇女毛片精品久久久| 欧美不卡1区2区3区| 久久影院一区| 国产日本欧美视频| 成人免费av| 欧美激情啊啊啊| 人成在线免费网站| 精品久久久久99| 182在线播放| 欧美精品一级二级三级| 一级毛片在线| 大伊人狠狠躁夜夜躁av一区| 永久在线免费观看| 在线亚洲一区观看| 日本福利片在线| 欧美日韩国产在线播放| 中文在线三区| 亚洲国产va精品久久久不卡综合| 成人性生交免费看| 成人免费视频视频| 男人天堂av片| 本田岬高潮一区二区三区| 女人另类性混交zo| 欧美日韩国产色综合一二三四| 2018国产精品视频| 日韩极品在线| 欧美一级免费视频| 中文字幕亚洲综合久久五月天色无吗''| 91视频国产精品| 亚洲清纯自拍| 在线成人性视频| 91亚洲大成网污www| 国产精品入口免费软件| 1024亚洲合集| 最近最好的中文字幕2019免费 | 欧美日韩国产精品激情在线播放| 中文字幕亚洲一区二区va在线| 福利视频在线导航| 在线亚洲午夜片av大片| 精品国产欧美日韩| 伊人再见免费在线观看高清版 | 亚洲国产精彩中文乱码av| 婷婷丁香在线| 中文字幕欧美在线| 国产精品美女在线观看直播| 国产精品99久久久久久久久| 中文字幕区一区二区三| 午夜精品久久17c| 日韩欧美一区二区三区在线视频 | 久久porn| 日韩欧美精品网址| 亚洲字幕成人中文在线观看| 亚洲一区二区欧美日韩| 深夜福利视频在线免费观看| 色成人在线视频| 免费羞羞视频网站| 九九亚洲视频| 久久精品magnetxturnbtih| 高清国产午夜精品久久久久久| 中文天堂在线观看| 国产福利视频一区二区三区| 国产精品美女久久久久av超清| 99精品国产福利在线观看免费| www国产精品内射老熟女| 欧美精品久久99| 亚洲日本va午夜在线电影| 欧美成人蜜桃| 一区二区三区中文在线观看| 国产在线精彩视频| 91免费看蜜桃| 亚洲品质自拍视频| 免费福利视频一区二区三区| 国产激情美女久久久久久吹潮| 日本一区二区三区视频视频| jizzjizz亚洲| 91精品国产综合久久精品| 成人免费在线| 欧美r级在线观看| 青青视频在线播放| 粉嫩13p一区二区三区| 在线一区日本视频| 国产福利视频一区二区三区| www.成年人视频| 无码av免费一区二区三区试看| 国产亚洲毛片在线| 老司机99精品99| aaa毛片在线观看| 欧美亚洲成人xxx| 欧美日韩国产麻豆| 国产在线日韩| 乱人伦中文视频在线| 91色在线观看| 国产婷婷色一区二区三区在线| 国产黄在线播放| 韩国欧美亚洲国产| 成人午夜电影网站| 欧美videosex性欧美黑吊| 操91在线视频| 国产精品天美传媒| 日本伊人久久| 国产女主播一区二区三区| 亚洲乱码国产乱码精品精可以看|