1. 纯函数

所谓纯函数,它是这样一种函数:即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用

从纯函数的定义,可以提取出纯函数的必要条件:

  • 纯函数接受参数,基于参数计算,返回一个新对象;
  • 不会产生副作用,计算过程不会修改输入的参数并且不修改其作用域之外的参数或方法;
  • 相同的输入保证相同的输出。

先来看个例子,做下对比:

let friend = {firstName: 'zhang',lastName: 'san',age: 18
}
// 非纯函数:会修改函数外变量 friend 的值
function appendMessage() {friend.message = {time: '2021年',info: '学习React'}
}
// 纯函数:返回一个新对象,且不会修改参数
function appendMessage(friend) {let copyFriend = Object.assign({}, friend)copyFriend.message = {time: '2021年',info: '学习React'}return copyFriend
}

通过上面的代码,可以总结出纯函数的优点:

  • 相同的输入必定是相同的输出,所以纯函数可以根据输入来做缓存;
  • 相同的输入必定是相同的输出,这就保证了引用的透明性;
  • 纯函数完全自给自足,这点的好处就是纯函数的依赖很明确,因此更易于观察和理解,而且让我们的测试更加容易;
  • 可靠:不用担心有副作用,可以更好的工作;
  • 代码并行:可以并行运行任意纯函数,因为纯函数不需要访问共享的内存,而且也不会因为副作用而进入竞争态。

所以,建议使用纯函数来编写函数。执行一个纯函数不需要担心它会干什么坏事,它不会产生不可预料的行为,也不会对外部产生影响。不论什么时候,相同的输入必定是产出相同的输出,而且使用纯函数方便我们调试和测试。

2. 纯函数组件

如果一个组件没有状态(state),那么组件的输出方式,将完全取决于两个参数:propscontext,只要有相同的 propscontext ,那么他们的输出绝对是相同的。将组件比喻成函数的话,相同的输入(propscontext) 永远都会有相同的输出:

// ...
render(){return this.props.sayHi ? <div>Hi</div> : <span>Byebye</span>
}

如上面代码所示,props 是输入,只要输入相同,那么输出也一定相同。

使用纯函数创建组件:

// function
function Title (props) {return <h1>{ props.title }</h1>
}
// 箭头函数
const Title = ({ props }) => <div>{ props.title }</div>

对比下使用类组件方式创建的组件:

// es6 类组件
class Title extends React.Component {render() {return <h1>{this.props.title}</h1>}
}

通过对比,纯函数组件写法简单了,可以看出纯函数组件的特点:

  • 组件不会被实例化,整体渲染性能得到提升;
  • 组件不能访问 this 对象;
  • 组件无法访问生命周期的方法;
  • 无状态组件只能访问输入的 props,无副作用。

可以总结出纯函数组件的优点

  • 无副作用;
  • 占内存更小,首次 render 的性能更好;
  • 语法更简洁,可读性好,逻辑简单,测试简单,代码量少,容易复用;
  • 更佳的性能表现:因为函数组件中不需要进行生命周期的管理和状态管理,因此 React 并不需要进行某些特定的检查和内存分配,保证了性能。

当然,纯函数组件也有自己的短板,它无生命周期,且没有 this

3. 使用场景

纯函数组件被鼓励在大型项目中尽可能以简单的写法来分割原本庞大的组件,未来 React 也会像面向无状态组件一样在譬如无意义的检查和内存分配领域进行一系列优化,所以只要有可能,尽量使用无状态组件。

纯函数不会产生不可预料的行为,建议合理的选择纯函数的方式书写函数。同样,在 React 组件中,如果无需本地 state 去缓存一些数据,也不需要用到生命周期函数,那么就可以把当前组件定义为纯函数组件,可读性好,且性能表现更佳。

一文带你了解React 纯函数组件相关推荐

  1. react纯函数组件useState更新页面不刷新

    问题描述: const [textList, setTextList] = useState(原数组); setTextList(新数组); 当修改原数组时,如果原数组是个深层数组(不只一层),使用s ...

  2. 一文带你了解React框架

    前言 由于 React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. 这个项目本身也越滚越大,从最早的U ...

  3. 一文带你深入理解probe函数

    驱动注册的probe函数 probe函数在设备驱动注册最后收尾工作,当设备的device 和其对应的driver 在总线上完成配对之后,系统就调用 platform设备的probe函数完成驱动注册最后 ...

  4. react+hook函数组件实现表单添加数据,表格展现

    效果图: 目录结构:(目分为主页面BookTable,以及两个组件,表格组件和添加书籍组件) 主页面:主要是将两个组件引入进页面,并将添加书籍事件.删除书籍事件传递给子组件,由子组件触发. impor ...

  5. Tomcat源码分析 | 一文带你整体把握架构及组件

    前言 Tomcat的前身为Catalina,而Catalina又是一个轻量级的Servlet容器.在美国,catalina是一个很美的小岛.所以Tomcat作者的寓意可能是想把Tomcat设计成一个优 ...

  6. react之纯函数、函数组件

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

  7. React Ways1——函数即组件

    未经审视的代码是不值得写的 ​ -- 沃兹吉硕德 React 中有一个经典的公式: const View = f(data) 复制代码 从这个公式里我们可以提取出两个特点: 视图由函数定义--函数即组 ...

  8. react hook函数

    State Hook useState():状态钩子.纯函数组件没有状态,用于为函数组件引入state状态, 并进行状态数据的读写操作 语法.参数及返回值说明:: const [xxx, setXxx ...

  9. 纯函数是什么?怎么合理运用纯函数?

    前言 纯函数这个这个词我相信小伙伴们多多少少都听说过,它是函数式编程的基础.本文主要是对纯函数进行探讨,包括基本概念,优点,运用的经典案例以及我们日常该如何去合理的使用等等. 纯函数的概念 首先我们来 ...

最新文章

  1. Codeforces Round #630 (Div. 2) A~D【思维,数论,字符串,位运算】
  2. Xamarin.Form 初学 之 服务引用-WCF服务引用
  3. Poj 1611 The Suspects
  4. 【渝粤教育】 广东开放大学 21秋期末考试组织行为学10068k2
  5. oracle 学习第一天
  6. Linux快速入门教程
  7. javascript 分割字符串
  8. VS编程,几个好用的Visual Studio插件推荐(一)
  9. 教你快速搭建个人网站
  10. arduino 有源 蜂鸣器_Arduino控制蜂鸣器发声
  11. nginx 基本入门
  12. S7-PLCSIM Advance ,解决 Error Code: -30,LicenseNotFound问题解决和期限21天限制的问题,对版本V1.0 V2.0 V3.0有效
  13. 『C++』endl、ends和flush的区别
  14. no package identifier when getting value for resource number 0x00000005
  15. 一文搞定Nginx的安装与高可用配置
  16. 2021.8.27夏令营阶段测试总结
  17. java安全架构____MD5加密原理和简介
  18. 反转藏头情诗——练习
  19. 2022年同济大学计算机考研初试成绩查询时间及入口
  20. 软件工程学习笔记——第六章 软件设计方法

热门文章

  1. java编写输出20个数_【Java每日编程小练习 2021-01-20】
  2. HIT_Trainning20140501
  3. swiper高度自适应_微信小程序swiper高度自适应
  4. 图片存放形式 hwc
  5. 厘清大数据要点,技术成长不迷茫
  6. 理解BERT模型理论
  7. JKI State Machine
  8. Kotlin实战和学习点滴
  9. 笔记-pdf.js 不展示签章
  10. 代码之外周刊第 21 期 - 20191124