国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
React 16更新
新js環(huán)境需求
新功能
首頁(yè) web前端 js教程 React 16 新功能有哪些? react16的新功能與功能的介紹

React 16 新功能有哪些? react16的新功能與功能的介紹

Sep 11, 2018 pm 04:05 PM
react

本篇文章主要的介紹了關(guān)於react16的一些新特性,還有關(guān)於react16的詳細(xì)功能介紹。下面就讓我們一起來看這篇文章的正文內(nèi)容吧

React 16更新

新js環(huán)境需求

react16依靠Map和Set集合和requestAnimationFrame(一個(gè)針對(duì)動(dòng)畫效果的API)

新功能

-?Fragments:render函數(shù)可以返回?cái)?shù)組和字符串
-?error?boundaries:錯(cuò)誤處理
-?portals?:支持聲明性地將子樹渲染到另一個(gè)DOM節(jié)點(diǎn)
-?custom?DOM?attributes?:ReactDom允許傳遞非標(biāo)準(zhǔn)屬性
-?improved?server-side?rendering:提升服務(wù)端渲染性能
  1. Fragments

    render()?{
    ??return?[
    ????<li key="A"/>First?item</li>,
    ????<li key="B"/>Second?item</li>,
    ????<li key="C"/>Third?item</li>,
    ??];
    }

    詳見API

  2. #error boundaries

    之前,一旦某個(gè)元件發(fā)生錯(cuò)誤,整個(gè)元件樹將會(huì)從根節(jié)點(diǎn)被unmount下來。 React 16修復(fù)了這一點(diǎn),引入了Error Boundary的概念,中文譯為“錯(cuò)誤邊界”,當(dāng)某個(gè)組件發(fā)生錯(cuò)誤時(shí),我們可以通過Error Boundary捕獲到錯(cuò)誤並對(duì)錯(cuò)誤做優(yōu)雅處理,如使用Error Boundary提供的內(nèi)容替代錯(cuò)誤組件。 Error Boundary可以看作是一種特殊的React元件,新增了componentDidCatch這個(gè)生命週期函數(shù),它可以捕捉自身及子樹上的錯(cuò)誤並對(duì)錯(cuò)誤做優(yōu)雅處理,包括上報(bào)錯(cuò)誤日誌、展示出錯(cuò)提示,而不是卸載整個(gè)組件樹。 (註:它並不能捕捉runtime所有的錯(cuò)誤,例如元件回呼事件裡的錯(cuò)誤,可以把它想像成傳統(tǒng)的try-catch語(yǔ)句)

    實(shí)作:

    抽像出檢查錯(cuò)誤邊界公共元件:

    class?ErrorBoundary?extends?React.Component{
    ????constructor(props){
    ????????super(props);
    ????????this.state=({
    ????????????ifError:false
    ????????});
    ????}
    
    ????componentDidCatch(err,?info)?{
    ????????this.setState({?ifError:?true?})
    ????????console.log(err);
    ????}
    
    ????render(){
    ????????if(this.state.ifError){
    ????????????return?`this?or?its?children?has?error`;
    ????????}
    ????????return?this.props.children
    ????}
    }

    建立一個(gè)簡(jiǎn)單的包含錯(cuò)誤的子元件:

    class?ErrorComponent?extends?React.Component{
    ????render(){
    ????????const?str?=?'123';
    ????????return?str.toFixed(2);
    ????}
    }

    使用錯(cuò)誤邊界元件包裹可能出錯(cuò)的元件

    class?MainShowComponent?extends?React.Component{
    ????render(){
    ????????return?(
    ????????????<p>
    ????????????????<ErrorBoundary>
    ????????????????????<ErrorComponent/>
    ????????????????</ErrorBoundary>
    ????????????</p>
    ????????)
    ????}
    }

    當(dāng)被錯(cuò)誤邊界元件包裹的子組件中出現(xiàn)錯(cuò)誤,會(huì)將錯(cuò)誤組件替換為字串:this or its children has error,而不會(huì)導(dǎo)致整體組件樹被卸載。 (想看更多就到PHP中文網(wǎng)React參考手冊(cè)欄位中學(xué)習(xí))

  3. #Portals

    Portals提供了一個(gè)一流的方法來將子代呈現(xiàn)到父元件的DOM層次結(jié)構(gòu)之外的DOM節(jié)點(diǎn)。

    ReactDOM.createPortal(
    ??child,
    ??container
    );

    第一個(gè)參數(shù)(child)是任何可渲染的React子元素,如元素,字串或片段。第二個(gè)參數(shù)(container)是一個(gè)DOM元素。

    通常,當(dāng)您從元件的render方法傳回一個(gè)元素時(shí),它將作為最近的父節(jié)點(diǎn)的子元素裝載到DOM中:

    render()?{
    ??//?React?mounts?a?new?p?and?renders?the?children?into?it
    ??return?(
    ????<p>
    ??????{this.props.children}
    ????</p>
    ??);
    }

    但是,有時(shí)會(huì)將子項(xiàng)插入到DOM中的其他位置會(huì)很有用:

    render()?{
    ??//?React?does?*not*?create?a?new?p.?It?renders?the?children?into?`pNode`.
    ??//?`pNode`?is?any?valid?DOM?node,?regardless?of?its?location?in?the?DOM.
    ??return?React.createPortal(
    ????this.props.children,
    ????pNode,
    ??);
    }

    有關(guān)Portals 和其事件冒泡詳見官網(wǎng)和CodePen範(fàn)例

  4. ##custom DOM attributes

    支援非標(biāo)準(zhǔn)的自訂DOM屬性,在先前的版本中,React會(huì)忽略無(wú)法辨識(shí)的HTML和SVG屬性,自訂屬性只能透過data-*形式添加,現(xiàn)在它會(huì)把這些屬性直接傳遞給DOM,這個(gè)改動(dòng)讓React可以去掉屬性白名單,從而減少了檔案大小。但當(dāng)DOM傳遞的自訂屬性是函數(shù)類型或event handler類型時(shí),也會(huì)被React忽略。

    <p a={()=>{}}></p>???//錯(cuò)誤
  5. improved server-side rendering

    提升服務(wù)端渲染效能,React 16的SSR被完全重寫,新的實(shí)作非常快,接近3倍效能於React 15,現(xiàn)在提供一種串流模式streaming,可以更快地把渲染的位元組傳送到客戶端。

打破改變

  • 調(diào)度和生命週期的改變

    • 呼叫setState返回null將不會(huì)更新render,這樣可以讓你在更新方法中自己決定是否更新。

      this.setState(
      ????(state)=>{
      ????????if(state.curCount%2?===?0){
      ????????????return?{curCount:state.curCount+1}
      ????????}else{
      ????????????return?null;
      ????????}
      
      ????}
      )
    • 在render方法中呼叫setState總是會(huì)導(dǎo)致更新,之前版本不支持,但盡量不要在render中呼叫setState。

    • setState的回呼函數(shù)會(huì)在componentDidMount/ componentDidUpdate 執(zhí)行之後立即執(zhí)行,而不是在所有元件渲染之後。

      ????this.setState(
      ????????(state)=>{
      ????????????if(state.curCount%2?===?0){
      ????????????????return?{curCount:state.curCount+1}
      ????????????}else{
      ????????????????return?null;
      ????????????}
      
      ????????},
      ????????()=>{
      ????????????console.log(this.state.curCount);
      ????????}
      ????)
  1. ReactDOM.render()和ReactDom.unstable_renderIntoContainer()如果在生命週期函數(shù)中呼叫將會(huì)傳回null。所以解決這類問題可以使用portals或refs

  2. setState的改變:

  3. 當(dāng)兩個(gè)元件

    >發(fā)生替換時(shí),B.componentWillMount總是會(huì)在A.componentWillUnmount之前執(zhí)行,在之前,A.componentWillUnmount有可能會(huì)提前執(zhí)行。

  4. 之前版本,當(dāng)改變一個(gè)元件的ref時(shí),ref和dom會(huì)在元件的render方法被呼叫之前分離?,F(xiàn)在,我們延遲了ref的改變,直到dom元素改變了,ref才會(huì)和dom分離。

  5. 對(duì)於不使用React而是使用其他方法來重新渲染容器是不安全的。這在以前的版本中也許會(huì)生效,但是我們覺得不支援這樣做?,F(xiàn)在對(duì)於這種情況我們會(huì)發(fā)出一個(gè)警告,而且你需要使用ReactDOM.unmountComponentAtNode來清空你的節(jié)點(diǎn)樹。

    ReactDOM.render(<App />,?p);
    p.innerHTML?=?'nope';
    ReactDOM.render(<App />,?p);//渲染一些沒有被正確清理的東西
    而你需要:

    ReactDOM.render(<App />,?p);
    ReactDOM.unmountComponentAtNode(p);
    p.innerHTML?=?'nope';
    ReactDOM.render(<App />,?p);?//?Now?it's?okay
    查看此issue

  6. #componentDidUpdate生命週期不再接受prevContext參數(shù)。

  7. 使用不唯一的key可能會(huì)導(dǎo)致子元件的複製或遺失,使用不唯一的key並不支持,也從未支持,但之前這是一個(gè)硬性錯(cuò)誤。

  8. Shallow renderer(淺層渲染)不再觸發(fā)componentDidUpdate(),因?yàn)镈OM的refs是不可用的。這也使得它與componentDidMount()之前版本中的呼叫一致。

  9. Shallow renderer不再支援unstable_batchedUpdates()。

  10. ReactDOM.unstable_batchedUpdates 現(xiàn)在回呼之後只有一個(gè)額外的參數(shù)。

  • 單一檔案瀏覽器版本的名稱和路徑已經(jīng)改變,以強(qiáng)調(diào)開發(fā)和生產(chǎn)版本之間的差異

    • #react/dist/react.js → react/umd/react.development.js

    • react/dist/react.min.js → react/umd/react.production.min .js

    • react-dom/dist/react-dom.js → react-dom/umd/react-dom.development.js

    • react-dom/dist/react-dom.min.js → react-dom/umd/react-dom.production.min.js

  • ##重寫並改進(jìn)伺服器渲染器

    • 伺服器渲染不再使用標(biāo)記驗(yàn)證,而是盡力附加到現(xiàn)有的DOM,警告不一致。它也不再使用每個(gè)節(jié)點(diǎn)上的空白元件和資料回饋屬性的註解。

    • 為伺服器渲染容器現(xiàn)在有一個(gè)明確的API。使用ReactDOM.hydrate而不是ReactDOM.render如果你正在恢復(fù)伺服器呈現(xiàn)的HTML。繼續(xù)使用,ReactDOM.render如果你只是做客戶端渲染。

  • 當(dāng)未知的屬性傳遞給DOM元件時(shí),如果是有效的值,React會(huì)渲染進(jìn)DOM。檢視文件

  • 在render和生命週期函數(shù)中的錯(cuò)誤預(yù)設(shè)會(huì)卸載整個(gè)DOM樹,為了阻止這個(gè),可以在UI的對(duì)應(yīng)位置新增錯(cuò)誤邊界。

  • 棄用

    • 不再建構(gòu)react-with-addons.js,所有相容的外掛程式都是在npm上單獨(dú)發(fā)布的,如果你需要它們,可以使用單一文件瀏覽器版本。

    • 在15.x版本中的棄用已經(jīng)從核心包中刪除,React.createClass現(xiàn)在可以作為create-react-class,React.PropTypes可以作為prop-types,React .DOM 作為react-dom-factories,react-addons-test-utils 作為react-dom/test-utils使用, shallow renderer 作為react-test-renderer/shallow使用。請(qǐng)參閱15.5.0和15.6.0文件參考。

    本篇文章到這就結(jié)束了(想看更多就到PHP中文網(wǎng)

    React使用手冊(cè)欄位中學(xué)習(xí)),有問題的可以在下方留言提問。

    以上是React 16 新功能有哪些? react16的新功能與功能的介紹的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

    本網(wǎng)站聲明
    本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強(qiáng)大的PHP整合開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁(yè)開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)程式碼編輯軟體(SublimeText3)

    React Router使用指南:如何實(shí)現(xiàn)前端路由控制 React Router使用指南:如何實(shí)現(xiàn)前端路由控制 Sep 29, 2023 pm 05:45 PM

    ReactRouter使用指南:如何實(shí)現(xiàn)前端路由控制隨著單頁(yè)應(yīng)用的流行,前端路由成為了一個(gè)不可忽視的重要部分。 ReactRouter作為React生態(tài)系統(tǒng)中最受歡迎的路由庫(kù),提供了豐富的功能和易用的API,使得前端路由的實(shí)作變得非常簡(jiǎn)單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範(fàn)例。安裝ReactRouter首先,我們需要

    Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

    Java框架與React框架的整合:步驟:設(shè)定後端Java框架。建立專案結(jié)構(gòu)。配置建置工具。建立React應(yīng)用程式。編寫RESTAPI端點(diǎn)。配置通訊機(jī)制。實(shí)戰(zhàn)案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

    PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

    PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,前端框架在Web開發(fā)中起著至關(guān)重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨(dú)特的特徵和優(yōu)勢(shì)。在選擇使用哪種前端框架時(shí),開發(fā)人員需要根據(jù)專案需求、團(tuán)隊(duì)技能和個(gè)人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

    vue.js vs.反應(yīng):特定於項(xiàng)目的考慮因素 vue.js vs.反應(yīng):特定於項(xiàng)目的考慮因素 Apr 09, 2025 am 12:01 AM

    Vue.js適合中小型項(xiàng)目和快速迭代,React適用於大型複雜應(yīng)用。 1)Vue.js易於上手,適用於團(tuán)隊(duì)經(jīng)驗(yàn)不足或項(xiàng)目規(guī)模較小的情況。 2)React的生態(tài)系統(tǒng)更豐富,適合有高性能需求和復(fù)雜功能需求的項(xiàng)目。

    React與Vue:Netflix使用哪個(gè)框架? React與Vue:Netflix使用哪個(gè)框架? Apr 14, 2025 am 12:19 AM

    NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

    React在HTML中的作用:增強(qiáng)用戶體驗(yàn) React在HTML中的作用:增強(qiáng)用戶體驗(yàn) Apr 09, 2025 am 12:11 AM

    React通過JSX與HTML結(jié)合,提升用戶體驗(yàn)。 1)JSX嵌入HTML,使開發(fā)更直觀。 2)虛擬DOM機(jī)制優(yōu)化性能,減少DOM操作。 3)組件化管理UI,提高可維護(hù)性。 4)狀態(tài)管理和事件處理增強(qiáng)交互性。

    React的生態(tài)系統(tǒng):庫(kù),工具和最佳實(shí)踐 React的生態(tài)系統(tǒng):庫(kù),工具和最佳實(shí)踐 Apr 18, 2025 am 12:23 AM

    React生態(tài)系統(tǒng)包括狀態(tài)管理庫(kù)(如Redux)、路由庫(kù)(如ReactRouter)、UI組件庫(kù)(如Material-UI)、測(cè)試工具(如Jest)和構(gòu)建工具(如Webpack)。這些工具協(xié)同工作,幫助開發(fā)者高效開發(fā)和維護(hù)應(yīng)用,提高代碼質(zhì)量和開發(fā)效率。

    Netflix的前端:React(或VUE)的示例和應(yīng)用 Netflix的前端:React(或VUE)的示例和應(yīng)用 Apr 16, 2025 am 12:08 AM

    Netflix使用React作為其前端框架。 1)React的組件化開發(fā)模式和強(qiáng)大生態(tài)系統(tǒng)是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復(fù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評(píng)論。 3)React的虛擬DOM和組件生命週期優(yōu)化了渲染效率和用戶交互管理。

    See all articles