温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

react 16.8版本新特性及对react开发的影响是什么

发布时间:2022-03-15 10:10:59 来源:亿速云 阅读:133 作者:iii 栏目:开发技术

本篇内容主要讲解“react 16.8版本新特性及对react开发的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react 16.8版本新特性及对react开发的影响是什么”吧!

    Facebook团队对社区上的MVC框架都不太满意的情况下,开发了一套开源的前端框架react,于2013年发布第一个版本。

    react最开始倡导函数式编程,使用function以及内部方法React.creactClass创建组件,之后在ES6推出之后,使用类组件Class构建包含生命周期的组件。

    react 16.8版本更新

    react16.8版本更新标志性的信息,是引入了hooks以及相关的一些api。

    useState:
    
    // 函数式组件初始化state和更改state:
    
    const Counter = () =>{
    const [num,setNum] = userState(0);
    return(
      <div>
          <div>{count}</div>
           <button onClick={()=>setCount(num+ 1)}>+</button>
      </div>
      );
    };

    useEffect

    userEffect副作用函数的组件,不仅取代了组件初始化,组件挂载成功,组件状态更新这三个阶段的生命周期函数

    同时还能在这个阶段处理一些内存队列:包括定时器等,解决了在16.8版本之前,在组件移除之后,异步队列没有被移除,占据内存导致页面卡顿等问题

    useEffect(() => {
      compoment.subscribe(id);
      return () => {
          compoment.unsubscribe(theId)    //取消订阅
      }
    });

    react16.8版本更新解决了什么问题

    组件复用更便捷

    在更新的版本之前,复用组件,更多的是使用高阶组件,以及封装的组件,通过传参和父子组件通信的形式去复用,

    更新之后,可以通过函数式组件返回状态的形式,去接受组件向外暴露的组件内容。

    实例

    //旧版本
    function children() {
      return function (WrappedComponent) {
        return class HighComponent extends React.Component {
          state = {
            childProps: xxx
          };
          render() {
            const { childProps } = this.state;
            return <WrappedComponent childProps={childProps} />;
          }
        };
      };
    }
    class App extends Component{
      render(){
    /**
     * 调用高阶组件
     */
        const { childProps} = this.props;
        return (
          <children
            columns={[...]}
          // tableProps包含pagination, onChange, dataSource等属性。
            {...childProps}
          />
        )
      }
    }
    // 新版本
    function children() {
      const [childProps, setChildProps] = useState(xxx);
      return childProps;
    }
    
    function App {
        const { childProps} = useTable();
        return (
          <Table 
            columns={[...]}
          // tableProps包含pagination, onChange, dataSource等属性
            {...childProps}
          />
        )
    }
    • 在我们上面提到的,清除定时器,以及解决在生命周期变化过程中,消除占用内存的队列等

    • 函数式组件出现了状态管理,在以往的react函数式编程过程中,react只能被动去接收一个从父组件传递下来的一个props状态,在hooks更新之后,可以使用hooks更新的方法,提高组件的功能性以及扩展性,在函数式组件当中拥有了像class组件一样可控生命周期

    • useEffect取代了一部分生命周期函数,从代码量的角度来说,简化了代码,解决了在class组件在编写过程中,需要不断使用bind或者箭头函数去绑定当前的this,更专注于当前状态的管理

    hooks和react diff算法

    • react diff这里不做深入讲解,简单来说diff算法是react以及vue2.0版本当中:

    内部有一套虚拟dom的算法,在组件渲染过程中,对每个dom渲染一个key值,

    在state状态更新过程时,对应渲染的虚拟dom会去对比真实渲染在页面上的dom元素,如果某个节点对比时发现有更改,对应更改当前虚拟dom节点的数据状态,再渲染真实的dom到页面当中。

    两者的联系:

    • hooks在更新之后,减少了对生命周期函数的执行,同时更新状态更为迅速,这样在虚拟dom执行过程中,提高diff执行速度

    • hooks使得函数式组件有了自己内部的状态,在函数式组件执行过程中,不需要等待装载到父组件当中,自己可以更新状态,所以减少了部分dom的深度,在页面渲染过程中,也算是变相提高了页面渲染速度。

    到此,相信大家对“react 16.8版本新特性及对react开发的影响是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI