自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

期待已久的React 18 Beta 來(lái)了

開(kāi)發(fā) 前端
React團(tuán)隊(duì)已經(jīng)在多個(gè)應(yīng)用的生產(chǎn)環(huán)境測(cè)試了Beta版本幾個(gè)月,并且相信他足夠穩(wěn)定。所以,開(kāi)發(fā)者已經(jīng)可以升級(jí)至v18 Beta版本。

[[435280]]

大家好,我卡頌。

經(jīng)過(guò)「React18工作組」幾個(gè)月工作,11月16日v18終于從Alpha版本更新到Beta版本。

本文會(huì)解釋?zhuān)?/p>

  • 這次更新帶來(lái)的變化
  • 對(duì)開(kāi)發(fā)者的影響
  • 如何安裝v18 Beta
  • v18穩(wěn)定版何時(shí)會(huì)來(lái)

帶來(lái)的變化

經(jīng)過(guò)與社區(qū)不斷溝通,Beta版將有如下三個(gè)API變動(dòng):

useSyncExternalStore將替代useMutableSource 用于訂閱外部源,見(jiàn):#86討論[1]

用法類(lèi)似如下:

  1. import {useSyncExternalStore} from 'react'
  2.  
  3. // 基礎(chǔ)用法,getSnapshot返回一個(gè)緩存的值 
  4. const state = useSyncExternalStore(store.subscribe, store.getSnapshot); 
  5.  
  6. // 根據(jù)數(shù)據(jù)字段,使用內(nèi)聯(lián)的getSnapshot返回緩存的數(shù)據(jù) 
  7. const selectedField = useSyncExternalStore(store.subscribe, () => store.getSnapshot().selectedField); 

useId用于在客戶(hù)端與服務(wù)端之間產(chǎn)生唯一ID,避免SSR hydrate時(shí)元素不匹配,見(jiàn)#111討論[2]

用法類(lèi)似如下:

  1. function Checkbox() { 
  2.   const id = useId(); 
  3.   return ( 
  4.     <> 
  5.       <label htmlFor={id}>Do you like React?</label> 
  6.       <input type="checkbox" name="react" id={id} /> 
  7.     </> 
  8.   ); 
  9. ); 

useInsertionEffect用于插入全局DOM節(jié)點(diǎn),見(jiàn)#110討論[3]

useInsertionEffect工作原理類(lèi)似useLayoutEffect,區(qū)別在于回調(diào)執(zhí)行時(shí)還不能訪問(wèn)ref中的DOM節(jié)點(diǎn)。

你可以在這個(gè)Hook內(nèi)操作全局DOM節(jié)點(diǎn)(比如<style>或SVG<defs)。

操作CSS的庫(kù)(比如CSS-IN-JS方案)可以用這個(gè)Hook插入全局<style>。

用法類(lèi)似如下:

  1. function useCSS(rule) { 
  2.   useInsertionEffect(() => { 
  3.     if (!isInserted.has(rule)) { 
  4.       isInserted.add(rule); 
  5.       document.head.appendChild(getStyleForRule(rule)); 
  6.     } 
  7.   }); 
  8.   return rule
  9. function Component() { 
  10.   let className = useCSS(rule); 
  11.   return <div className={className} />; 
  12. }

至此,v18的特性已經(jīng)完備,正式版發(fā)布之前不會(huì)再新增API。

對(duì)開(kāi)發(fā)者的影響

React團(tuán)隊(duì)已經(jīng)在多個(gè)應(yīng)用的生產(chǎn)環(huán)境測(cè)試了Beta版本幾個(gè)月,并且相信他足夠穩(wěn)定。所以,開(kāi)發(fā)者已經(jīng)可以升級(jí)至v18 Beta版本。

Beta作為「預(yù)發(fā)布版本」,與最終的正式版的區(qū)別是:可能還有少許bug,但整體穩(wěn)定。

社區(qū)中兼容v18的知名項(xiàng)目包括:

  • Next.js
  • Gatsby
  • React Redux
  • React Testing Library

安裝Beta

安裝命令如下:

  1. # npm 
  2. npm install react@beta react-dom@beta 
  3. # yarn 
  4. yarn add react@beta react-dom@beta 

穩(wěn)定版何時(shí)回來(lái)

根據(jù)Andrew的回復(fù),正式版最早發(fā)布時(shí)間可能會(huì)在22年1月底。

總結(jié)

不管是新文檔[4]還是Beta版,可以發(fā)現(xiàn)下半年React團(tuán)隊(duì)節(jié)奏明顯加快了。

從v15升級(jí)到v16啟用Fiber架構(gòu)那天開(kāi)始,React團(tuán)隊(duì)就在為并發(fā)更新的穩(wěn)定努力了。

這一天,終于不遠(yuǎn)了......

參考資料

[1]#86討論:

https://github.com/reactwg/react-18/discussions/86

[2]#111討論:

https://github.com/reactwg/react-18/discussions/111

[3]#110討論:

https://github.com/reactwg/react-18/discussions/110

[4]新文檔:

http://beta.reactjs.org/

 

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

2009-10-12 14:31:24

紅帽虛擬化

2021-07-19 22:31:39

微信微信客服移動(dòng)應(yīng)用

2020-12-09 11:10:58

GitHub代碼開(kāi)發(fā)者

2021-11-09 09:00:00

Docker開(kāi)發(fā)工具

2021-03-18 16:16:48

高德地圖AR步行導(dǎo)航

2013-09-16 11:10:30

2022-09-26 09:39:30

LinuxsystemdWSL

2021-08-16 12:20:03

Debian 11Linux軟件包

2020-11-17 06:04:59

ZigC語(yǔ)言

2019-01-16 15:15:33

GitHub微軟私有倉(cāng)庫(kù)

2010-06-30 09:26:43

Firefox 4.0

2021-06-16 06:05:25

React18React

2021-10-10 22:16:24

iOS蘋(píng)果系統(tǒng)

2021-07-18 22:31:29

微信功能手機(jī)

2009-08-04 13:20:12

2017-08-31 16:26:43

微軟

2009-03-19 20:41:31

VirtualBox GuestsOpenGL 3D

2021-05-22 22:54:22

微信直播文檔

2020-09-25 15:15:29

LinuxKubernetes開(kāi)源

2012-01-12 10:02:59

Windows 8 B登場(chǎng)
點(diǎn)贊
收藏

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