zoukankan      html  css  js  c++  java
  • react--react16的新特性

    react16的新特性主要在以下四个方面:

      新的生命周期
    
      新的语法
    
      优化
    
      hook
    

    新的生命周期

    在react16中,不建议使用以下生命周期函数:

      componentWillMount()
    
      componentWillReceiveProps(nextProps, nextState)
    
      componentWillUpdate()
    

    新增了以下生命周期函数:

      static getDerivedStateFromProps(nextProps, prevState)
    
      getSnapshotBeforeUpdate(prevProps, prevState)
    
      componentDidCatch(error, info)
    

    static getDerivedStateFromProps(nextProps, prevState)

    在组件实例内无法调用静态方法,静态方法中也无法通过this使用实例中的其他属性或方法。可以防止对组件实例的错误操作。

    主要用来在组件实例后、接受到新的prop后,进行调用。此方法返回一个对象,这个对象会被更新到实例的state中;如果返回为空,则不会更新。

    getSnapshotBeforeUpdate(prevProps, prevState)

    在DOM更新前调用,返回值将被传给componentDidUpdate

    componentDidCatch(error, info)

    在之前,只要某个组件中出现错误,整个应用就会崩溃。通过此函数,在发生错误的组件的父组件中进行错误捕获。如果组件的父组件中未处理,则去父组件的父组件中进行查看是否有处理函数,层层递归。

    新的语法

    在之前,ref是通过在元素上指定ref值进行使用,并通过this.refs.xxx进行获取,在react16中,新增了以下两个定义方式:

    // 第一种方式
    constructor(){
       this.inputRef = React.createRef()
    }
    
    render(){
       return (
          <input ref={this.inputRef} />
       )
    }
    
    // 第二种方式
    render(){
       return (
          <input ref={(ref) => {this.inputRef = ref}} />
       )
    }
    

    如果是需要层层传递的props,可以通过React.createContext避免嵌套。

    性能方面的优化

    fragment

    react要求jsx元素是树结构,但每次需要在最外层包裹一个容器会造成浪费。react提供了fragment,让我们在实现元素列表时,无需增加额外节点

    render(){
       return (
          <> // 也可以用<React.Fragments>
            <tr><td></td></tr>
            <tr><td></td></tr>
          </> //也可以用</React.Fragments>
       )
    }
    

    React.memo()

    用来控制组件何时重新渲染。在之前,只要有更新就会引起该组件及其所有子组件重新渲染。使用memo就可以实现仅仅部分组件渲染。类似之前的pureComponent,但可以在函数组件中使用。

    React.lazy & React.Suspens

    实现React的Code Spliting对React代码进行拆包,有效的减少一次性加载太多代码的问题。

    用法:

    const IconDemo = lazy(() => import('./icon'));
    
    <Suspense fallback={<div className="loading">Loading...</div>}>
        <Route path="/" component={Home} exact />
        <Route path="/icon" component={IconDemo} />
    </Suspense> 
    

    hook

    实现了在函数组件中使用state,详解参考官网

  • 相关阅读:
    02-SpringCloud 基础框架搭建
    01-SpringCloud 理论
    ES7 语法详解(async 与 await(重点))
    ES6 语法详解(Set和Map(重点))
    ES6 语法详解(对象扩展)
    ES6 语法详解(数组扩展)
    ES6 语法详解(数值扩展)
    ES6 语法详解(字符串扩展)
    ES6 语法详解(class关键字)
    ES6 语法详解(Generator函数)
  • 原文地址:https://www.cnblogs.com/ashen1999/p/13878741.html
Copyright © 2011-2022 走看看