一.纯函数 Pure Function

定义:一个函数的返回结果只依赖于它的参数,并且在执行的过程中没有副作用,我们就把该函数称作纯函数。 — 特点:

  • 1.函数的返回结果只依赖与它的参数(同一个输入只能有同一个输出)
let foo=(a, b)=>a+b
foo(1,2) //=3
  • 2.函数的执行过程中没有副作用(一个函数执行过程对外部产生了可观察的变化那么就说这个函数是有副作用的。)

什么是副作用
除了修改外部的变量,一个函数在执行过程中还有很多方式产生外部可观察的变化,比如说调用 DOM API 修改页面,或者你发送了 Ajax 请求,还有调用 window.reload 刷新浏览器,甚至是 console.log 往控制台打印数据也是副作用。

二.函数组件

function myComponents(props) {return <h1>Hello Word!</h1>;
}

函数组件特点

  • 函数组件中是没有this的,通过props传递过来的数据是不变的,同时也不没有生命周期钩子函数;
  • 函数组件在Hook没出来之前是无状态的,在React16后增加了Hook来保存数据状态;
  • 函数式组件性能消耗小,不需要创建实例,渲染的时候就执行一下,得到返回的 react 元素后就直接把中间量全部都销毁。

三.类组件

class MyComponents extends React.Component {render() {return <h1>Hello Word!</h1>;}
}
  • 在类组件中必须要有constructor()函数,用于定义组件内部变量,默认创建一个空的构造函数,该函数接收参数(props)。想要访问父组件传递过来的参数,可通过this.props的方式去访问;
  • 类组件中有生命周期钩子函数,可以在特定的钩子函数中执行特殊操作;例如接口请求、事件监听和绑定定时器等通常放到componentDidMount()钩子函数中,此时组件已经挂载,DOM树也构建完毕。而移除事件监听和清除定时器要放到componentWillUnmount()钩子函数中,避免发生内存泄露。
  • 在类组件中有state状态存储,当要改变变量值时通过setState()更改;
  • 类组件的性能消耗比较大,需要创建类组件的实例,且不能销毁;

四.类组件和函数组件的区别

是否有this 是否有生命周期 是否有状态state (灵魂三问)

类组件有生命周期,函数组件没有;
类组件依赖class创建,函数组件通过return返回创建;
类组件有状态存储,函数组件需要依赖Hook完成状态存储;
类组件中有this指向问题需要特别注意,函数组件则没有this;
类组件消耗大,需要创建实例,且不能销毁;函数组件消耗少,得到结果就销毁;

总结:
1.函数组件语法更短、更简单,这使得它更容易开发、理解和测试。
2.类组件也会因大量使用 this 而让人感到困惑。使用功能组件可以很容易地避免这种缺点,保持代码整洁。
3.当业务逻辑复杂,用类组件更易于我们维护,也相应降低了开发成本。
4.函数组件多用于简单功能模块封装,便于复用;
发展前景:未来函数式组件将会成为主流,因为它可以更好的屏蔽 this 问题、规范和复用逻辑,更好的适合事件分片和并发渲染

五.纯组件pureComponent

其实React中的纯组件和纯函数的关系不是特别大。我们有时候在更新state的时候会发现,我们使用setState的对象模式传递一个空对象过去也会重新render渲染页面,而且父组件render之后,子组件也会重新render,但是这不是我们想看到的,会降低性能。我们希望看到的是当我们的state和props改变了,再进行render。

这个时候有人提出来一个方案,在新的生命周期中不是有一个shouldComponentUpdate钩子函数嘛?我们可以在这个钩子里面判断一下state和props是否改变了,然后再判断是否render啊,但是如果我们的state和props数据很多呢,这样我们代码代价是不是就太高了呢?

所以pureComponent就是React中为这种情况提供的一种新的解决方案,类式组件在继承的时候都继承了React.Compoonent组件,有了pureComponent之后,我们直接替换成继承React.pureComponent就可以达到这种效果了。

react之纯函数、函数组件、类组件、纯组件相关推荐

  1. 抽象类(纯虚函数、虚函数)和虚基类(虚继承)

    C++多态 C++的多态包括静态多态和动态多态,静态多态包括函数重载和泛型编程,动态多态包括虚函数.静态多态实在编译期间就能确定,动态多态实直在程序运行时才能确定. 抽象类 虚函数 在默认情况下对函数 ...

  2. React 中ref 的使用(类组件和函数组件)以及forwardRef 与 useImperativeHandle 详解

    前言 在一个父组件中,我们想要获取到其中的节点元素或者子组件实例,从而直接调用其上面的方法.Class 类组件和函数组件是两种不同的写法. 1. Class 组件中使用ref 在 React 的 Cl ...

  3. react中类组件传值,函数组件传值:父子组件传值、非父子组件传值

    父子组件传值.非父子组件传值: 类组件传值 父子 组件传值 子 传 父: 子组件:事件的触发sendMsg=()=>{this.props.person();}父组件:<Child per ...

  4. React Natvie RN 参数 函数 对象 类

    函数组件只需要接受props参数并且返回一个React元素,class组件需要继承component,还需要创建render 并且返回React元素,语法看起来麻烦点. 类组件有this,有生命周期, ...

  5. C++ day24 继承(四)抽象基类,纯虚函数,protected

    文章目录 关键字protected(带来方便同时带来危险,最好不用) 抽象基类和纯虚函数(is-a关系用公有继承实现有时候也不太合适) 用圆和椭圆的笨拙派生为例,挑拨is-a和公有继承的搭档关系 替代 ...

  6. React组件——类组件

    一.组件的概念 使用组件的方式进行编程,可以提高开发效率,提高组件的复用性.提高代码的可维护性和可扩展性 React定义组件的方式有两种 类组件:React16.8版本之前几乎React使用的都是类组 ...

  7. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法

    vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...

  8. 第十三周项目三-形状类族中的纯虚函数

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

  9. C++中为什么要引入抽象基类和纯虚函数?

    为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果. 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义:带有纯虚函数的类为抽象类. ...

  10. C++抽象基类和纯虚成员函数

    公共接口是指一系列成员函数的集合,支持该接口的类必须以合适的方式重新定义这些成员函数,否则就无法创建对象.在C++中,可以通过抽象基类来实现公共接口. 纯虚函数 纯虚成员函数的声明语法如下: virt ...

最新文章

  1. 《研磨设计模式》chap19 备忘录模式
  2. php前端响应式框架,响应式css前端框架有哪些
  3. 界限的应用开发 HTML5,更高效地到达更多设备和用户
  4. 第3章:Hadoop分布式文件系统(1)
  5. WinForm设置窗体默认控件焦点
  6. 哈希表及处理冲突的方法
  7. live2d手机制作软件_Live2D制作软件
  8. 二叉树前中后序遍历及其本质
  9. 全功能短视频平台去水印解析页面源码
  10. RabbitMQ系列8 TTL 死信队列 延迟队列
  11. HTTP 和 HTTPS 有什么区别?
  12. Fake Location(安卓)
  13. 如何解决移动端 Retina 屏(高清屏)1px 像素问题
  14. 【论文笔记】Explainable Reasoning over Knowledge Graphs for Recommendation
  15. 织梦cms是什么-织梦CMS免费搭建工具只需要输入域名
  16. 仿京东天猫商品详情页
  17. OpenGL入门二——变换
  18. 多组数据求最大公约数
  19. 接口测试自动化框架汇总
  20. 降噪表现越级的真无线耳机,音质也很悦耳,哈氪拾光Pro体验

热门文章

  1. 防止手机短信诈骗你能轻松应对吗
  2. MMORPG游戏服务器端设计
  3. HI HAO A
  4. 数据结构在软件编程中的地位
  5. kettle日志监控
  6. iphone ios MPMoviePlayerController在ios 6 模拟器中无法播放
  7. OpenCV图像处理--Qt+OpenCV环境搭建
  8. 机械原理葛文杰P47页牛头刨床运动分析代码,画图精致
  9. 如何自己注册光猫或者更换光猫之后配置光猫(适用于电信的光纤分纤)
  10. [随笔]现在已经不是我们的江湖了