Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >编程中的 Side effect 是什么?

编程中的 Side effect 是什么?

作者头像
CodecWang
发布于 2021-12-07 07:40:40
发布于 2021-12-07 07:40:40
2.4K00
代码可运行
举报
文章被收录于专栏:CodecWangCodecWang
运行总次数:0
代码可运行
  • Author: CodecWang
  • Date: 2021/04/17

Side effect,中文可以叫 “副作用”。这个词第一次听的话有种负面的感觉,但如果你使用过 React Hooks 中的useEffect或接触过函数式编程,对它应该不陌生。

概念

来看下维基百科 的定义:

函数副作用是指当调用函数时,除了返回函数值之外,还对主调方产生了附加的影响。比如修改全局变量(函数外的变量),修改参数或改变外部存储。

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let number = 0;

const plusOneA = () => number =+ 1;

const plusOneB = (number) => number + 1;Copy to clipboardErrorCopied

调用plusOneA()后,外部环境的 number 就会变化,而调用plusOneB()后只是执行了一次数学运算,并没有改变什么。

除了这种外部变量的变更外,像文件、数据库、屏幕等输入输出都可以看作是独立于运行环境之外的系统全局变量,也就是说print()在屏幕上打印出日志这个效果也叫副作用。

所以这里的副作用更像是 “附作用”:一个函数除自身数学意义上的输入和输出外附加产生的效果都可以叫 Side effect

纯函数

与副作用常常关联的一个概念是纯函数(Pure function),维基百科定义:

若一个函数符合以下要求,则它可能被认为是纯函数:

  1. 此函数在相同的输入值时,需产生相同的输出。函数的输出和输入值以外的其他隐藏信息或状态无关,也和由 I/O 设备产生的外部输出无关。
  2. 该函数不能有语义上可观察的函数副作用,诸如 “触发事件”,使输出设备输出,或更改输出值以外物件的内容等。

纯函数的输出可以不用和输入值有关,但不能和输入值以外的任何状态有关。像前面例子中的plusOneA()就是纯函数。

误解

  • 常见误解:副作用是编程中未预料到的、意外的效果,应该尽量避免

大部分人从字面意思上理解副作用就会产生这样的误解。副作用很多时候正是我们的预期效果,比如打印日志print()或写入文件writeFile(),所以并不一定要全部避免,但要尽量避免真正意外的副作用。

useEffect

像 React/Vue 等框架都是靠状态驱动 UI 渲染,所以说每次状态的变更都会产生 Side effect。这就是useEffect这个 React hook 的意思,默认情况下,任何状态变更导致的重新渲染都会触发 useEffect 函数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试官:知道纯函数是什么吗?纯函数有什么优势?
函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念;
zayyo
2023/12/11
2620
一个新的React概念:Effect Event
在React中,有一个「非常容易」被误用的API —— useEffect,今天要介绍的Effect Event就属于由useEffect衍生出的概念。
公众号@魔术师卡颂
2023/08/30
2940
一个新的React概念:Effect Event
超性感的React Hooks(四):useEffect
这里有一段介绍useEffect的文字,如果你能够从中领悟到useEffect的用法,那么恭喜你,你应该大概率是个天赋型选手。
用户6901603
2020/07/23
1.6K0
面试官:你是怎样进行react组件代码复用的1
Mixin(混入)是一种通过扩展收集功能的方式,它本质上是将一个对象的属性拷贝到另一个对象上面去,可以拷贝多个属性到一个对象上,为了解决代码复用问题。
beifeng1996
2023/01/03
5210
函数式编程中如何处理副作用?
纯函数是说没有副作用的函数(a function that has no side effects),有几个好处:
ayqy贾杰
2019/06/12
1.8K0
从 redux 的纯函数到函数式编程
作者:王少飞 在做业务时我们用 react + redux 框架,其中 redux 的 reducers 是用的纯函数。这里什么是纯函数?为什么要用纯函数?纯函数的好处是什么?接下来的我们一起研究下。
腾讯IVWEB团队
2017/03/13
1.4K0
React新文档:不要滥用effect哦
随着需求不断迭代,其他地方也会修改状态a。但是在那个需求中,并不需要状态a改变后发起请求。
公众号@魔术师卡颂
2022/06/10
1.5K0
React新文档:不要滥用effect哦
React-hooks面试考察知识点汇总
React 没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到 store)。有一些解决此类问题的方案,比如 render props 和 高阶组件。但是这类方案需要重新组织你的组件结构,这可能会很麻烦,使你的代码难以理解。
beifeng1996
2022/10/06
1.3K0
React Hooks 源码解析(4):useEffect
React 源码版本: v16.11.0 源码注释笔记:airingursb/react 1. useEffect 简介 1.1 为什么要有 useEffect 我们在前文中说到 React Hooks 使得 Functional Component 拥有 Class Component 的特性,其主要动机包括: 在组件之间复用状态逻辑很难 复杂组件变得难以理解 难以理解的 class 对于第二点,首先,针对 Class Component 来说,我们写 React 应用时经常要在组件的各种生命周期中编
QQ音乐前端团队
2019/12/24
2.5K0
React Hooks 源码解析(4):useEffect
前端实现异步的几种方式_redux是什么
实际上,这个术语出自康奈尔大学的一篇论文:http://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf
全栈程序员站长
2022/10/02
1.8K0
前端实现异步的几种方式_redux是什么
函数式编程简介
函数式编程是如何编写程序的方法论,主要思想是把运算过程尽量写成一些列嵌套函数的调用。 可以归结为面向过程编程,把复杂任务分解成简单的任务
epoos
2022/06/06
6890
【React】883- React hooks 之 useEffect 学习指南
如果你不想阅读整篇文章,可以快速浏览这份摘要。要是某些部分不容易理解,你可以往下滚动寻找相关的内容去阅读。
pingan8787
2021/03/16
6.6K0
【React】883- React hooks 之 useEffect 学习指南
RxJS 启蒙
从了解 Rx 至今,我决定抛开 官话、AI ,以自述的形式向大家,也向着多年后再次回温文章的自己做一个阐释或者说是学习记录,亦或是理解沉淀。
不换
2024/04/30
1120
RxJS 启蒙
ahooks 中那些控制“时机”的hook都是怎么实现的?
本文是深入浅出 ahooks 源码系列文章的第五篇,这个系列的目标主要有以下几点:
GopalFeng
2022/08/01
1.5K0
ahooks 中那些控制“时机”的hook都是怎么实现的?
浅谈Hooks&&生命周期(2019-03-12)
现在流行的前端框架,无论是angular还是React,又或是Angular2以及以上,都由框架自身提供了生命周期(有的叫生命周期钩子)供开发者使用。
贺贺V5
2019/03/20
3.4K0
浅谈Hooks&&生命周期(2019-03-12)
React Hooks笔记:useState、useEffect和useLayoutEffect
useState 让函数组件也可以有 state 状态,并进行状态数据的读写操作。
德顺
2021/08/19
2.9K0
ReactHooks源码解析之useEffect
当执行App()时,会调用useEffect(xxx),因为是useEffect()的第一次调用,所以此时会执行源码里的mountEffect()
进击的小进进
2020/06/03
1.1K0
Effect:由渲染本身引起的副作用
实际开发过程中,还会遇到当进入页面时触发一些动作(如播放视频、日志发送、连接到聊天服务器等)。其①不能在渲染过程中发生,②也没有一个特定的事件(比如点击)触发。
奋飛
2024/05/25
1790
Effect:由渲染本身引起的副作用
React Hook实践指南
在React为什么需要Hook这篇文章中我们探讨了React开发团队为什么要为Function Component添加Hook的原因,在本篇文章中我将会为大家提供一份较为全面的React Hook实践指南,其中包括以下方面的内容:
进击的大葱
2022/08/22
2.6K0
重点来了,useEffect
当了二十多天废物,今天开始更新,让大家久等了。花了挺长的时间优化文章 UI 细节,进一步提高阅读体验,大家多多感受一下.
用户6901603
2022/05/24
1.1K0
重点来了,useEffect
相关推荐
面试官:知道纯函数是什么吗?纯函数有什么优势?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验