React v16.6中有什么新功能

自React v16.5首次發(fā)布以來不到2個月刊咳,React團隊的優(yōu)秀人員已經向我們贈送了第101版的React侯勉。這個最新版本引入了一些新的API增加React.lazy()猜极,React.memo()以及contextType甚至引入了一個新的生命周期方法缨叫,getDerivedStateFromError

請記住缅糟,這是v16的次要版本挺智,因此祷愉,如果您已經使用了所述主要版本的版本窗宦,則升級應該提供最少令人頭疼的地方。

讓我們來看看這些新的功能吧二鳄!

React.lazy()

React.lazy()允許您僅在需要渲染時加載組件赴涵,即延遲加載。這可以讓你減少你的包大小订讼,雖然現(xiàn)在你可以用Webpack這樣的東西髓窜,但是看到它直接進入React是非常棒的。

// React <= v16.5
import ImmediatelyLoadedComponent from './ImmediatelyLoadedComponent';

// React v16.6+
import { lazy } from 'react';
const LazyLoadedComponent = lazy(() => import('./LazyLoadedComponent'));

稍等下欺殿,還有更多寄纵。您可以結合React.lazy()使用Suspense,并指定一個fallback部分脖苏,而動態(tài)加載組件加載程拭,將顯示。

import { lazy, Suspense } from 'react';
const LazyLoadedComponent = lazy(() => import('./LazyLoadedComponent'));

function App() {
  return (
    <Suspense fallback={<div>Please wait while we lazy load...</div>}>
      <LazyLoadedComponent />
    </Suspense>
  );
}

應該減少大量的“加載”樣板代碼棍潘!有關備受期待的React Suspense的更多信息恃鞋,請查看Dan Abramov在JSConf Iceland 2018上發(fā)表的流行演講

請記住亦歉,React.lazy()并且Suspense還沒有為服務器端渲染做好準備恤浪,但將來可以使用。

React.memo()

當您不需要管理狀態(tài)時肴楷,功能組件很棒水由,但缺少生命周期方法意味著您無法定義shouldComponentUpdate。如果沒有它赛蔫,您的組件將始終重新呈現(xiàn)砂客。

類似于React.PureComponentReact.memo()是一個更高階的組件濒募,允許您在函數(shù)組件的props相同時跳過重新渲染:

const Component = React.memo(function (props) { });

開箱即用鞭盟,React.memo()只對道具對象進行淺層比較。如果您需要更高級的東西瑰剃,可以將比較函數(shù)作為第二個參數(shù)傳遞給React.memo()

const Component = React.memo(function (props) { }, (prevProps, nextProps) => {
  // Return true if equal, false if not
});

contextType

Context API齿诉。它可以被用到,但不鼓勵使用。然后在React v16.3中添加了官方Context API≡辆纾現(xiàn)在在React v16.6中歇竟,更容易在類組件中的任何位置使用上下文:

import React, { Component } from 'react';

const GatorContext = React.createContext('American');

class Alligator extends Component {
  static contextType = GatorContext;

  componentDidMount() {
    const contextValue = this.context;
    // Do some stuff with the context value
  }

  componentWillReceiveProps() {
    const contextValue = this.context;
    // Do some other stuff with the context value
  }

  render() {
    const contextValue = this.context;
    // Conditionally render based on the context value
  }
}

getDerivedStateFromError

進入React v16的一個重要補充是Error Boundaries,它有助于通過處理React渲染方法中的錯誤來緩解以前的痛點抵恋。

除此之外componentDidCatch焕议,React v16.6引入了getDerivedStateFromError生命周期方法。與用于錯誤日志記錄的對應文件不同弧关,getDerivedStateFromError收到錯誤盅安,并且它會返回更新狀態(tài)的值:

import React, { Component } from 'react';

class GatorError extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  render() {
    if (this.state.error) {
      return <div>Something borked :(</div>;
    }
    // If these kids act up, we'll know!
    return this.props.children;
  }
}

類似于React.lazy()getDerivedStateFromError目前無法用于服務器端渲染世囊,未來也是如此别瞭。

棄用的Api

另外值得注意的是,你應該注意到v16.6中有一小部分的棄用株憾,特別是如果你想讓你的代碼庫保持整潔蝙寨,就像React-land中的東西一樣:

  • ReactDOM.findDOMNode()
  • Legacy Context - 現(xiàn)在我們有一個官方的Context API,我們應該停止使用contextTypesgetChildContext嗤瞎。

只有在使用StrictMode組件時墙歪,才會顯示這些棄用。如果沒有贝奇,您將不會在日志中看到這些虹菲。仍然需要值得注意;)

</article>

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弃秆,隨后出現(xiàn)的幾起案子届惋,更是在濱河造成了極大的恐慌,老刑警劉巖菠赚,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脑豹,死亡現(xiàn)場離奇詭異,居然都是意外死亡衡查,警方通過查閱死者的電腦和手機瘩欺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拌牲,“玉大人俱饿,你說我怎么就攤上這事∷觯” “怎么了拍埠?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長土居。 經常有香客問我枣购,道長嬉探,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任棉圈,我火速辦了婚禮涩堤,結果婚禮上,老公的妹妹穿的比我還像新娘分瘾。我一直安慰自己胎围,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布德召。 她就那樣靜靜地躺著白魂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氏捞。 梳的紋絲不亂的頭發(fā)上碧聪,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天冒版,我揣著相機與錄音液茎,去河邊找鬼。 笑死辞嗡,一個胖子當著我的面吹牛捆等,可吹牛的內容都是我干的。 我是一名探鬼主播续室,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栋烤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挺狰?” 一聲冷哼從身側響起明郭,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丰泊,沒想到半個月后薯定,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瞳购,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年话侄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片学赛。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡年堆,死狀恐怖,靈堂內的尸體忽然破棺而出盏浇,到底是詐尸還是另有隱情变丧,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布绢掰,位于F島的核電站痒蓬,受9級特大地震影響译蒂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜谊却,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一柔昼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炎辨,春花似錦捕透、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至破喻,卻和暖如春虎谢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曹质。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工婴噩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羽德。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓几莽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宅静。 傳聞我的和親對象是個殘疾皇子章蚣,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355