我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React新文档滥用effect问题怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React新文档滥用effect问题怎么解决

这篇文章主要介绍了React新文档滥用effect问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React新文档滥用effect问题怎么解决文章都会有所收获,下面我们一起来看看吧。

    引言

    你或你的同事在使用useEffect时有没有发生过以下场景:

    当你希望状态a变化后发起请求,于是你使用了useEffect

    useEffect(() => {  fetch(xxx);}, [a])

    这段代码运行符合预期,上线后也没问题。

    随着需求不断迭代,其他地方也会修改状态a。但是在那个需求中,并不需要状态a改变后发起请求。

    你不想动之前的代码,又得修复这个bug,于是你增加了判断条件:

    useEffect(() => {  if (xxxx) {    fetch(xxx);  }}, [a])

    某一天,需求又变化了!现在请求还需要b字段。

    这很简单,你顺手就将b作为useEffect的依赖加了进去:

    useEffect(() => {  if (xxxx) {    fetch(xxx);  }}, [a, b])

    随着时间推移,你逐渐发现:

    • 是否发送请求与if条件相关

    • 是否发送请求还与a、b等依赖项相关

    • a、b等依赖项又与很多需求相关

    根本分不清到底什么时候会发送请求,真是头大...

    如果以上场景似曾相识,那么React新文档里已经明确提供了解决办法。

    一些理论知识

    新文档中这一节名为Synchronizing with Effects,当前还处于草稿状态。

    但是其中提到的一些概念,所有React开发者都应该清楚。

    首先,effect这一节隶属于Escape Hatches(逃生舱)这一章。

    React新文档滥用effect问题怎么解决

    从命名就能看出,开发者并不一定需要使用effect,这仅仅是特殊情况下的逃生舱。

    React中有两个重要的概念:

    Rendering code(渲染代码)

    Event handlers(事件处理器)

    Rendering code指开发者编写的组件渲染逻辑,最终会返回一段JSX

    比如,如下组件内部就是Rendering code

    function App() {  const [name, update] = useState('KaSong');  return <div>Hello {name}</div>;}

    Rendering code的特点是:他应该是不带副作用的纯函数。

    如下Rendering code包含副作用(count变化),就是不推荐的写法:

    let count = 0;function App() {  count++;  const [name, update] = useState('KaSong');  return <div>Hello {name}</div>;}

    处理副作用

    Event handlers是组件内部包含的函数,用于执行用户操作,可以包含副作用

    下面这些操作都属于Event handlers

    • 更新input输入框

    • 提交表单

    • 导航到其他页面

    如下例子中组件内部的changeName方法就属于Event handlers

    function App() {  const [name, update] = useState('KaSong');  const changeName = () => {    update('KaKaSong');  }  return <div onClick={changeName}>Hello {name}</div>;}

    但是,并不是所有副作用都能在Event handlers中解决。

    比如,在一个聊天室中,发送消息是用户触发的,应该交给Event handlers处理。

    除此之外,聊天室需要随时保持和服务端的长连接,保持长连接的行为属于副作用,但并不是用户行为触发的。

    对于这种:在视图渲染后触发的副作用,就属于effect,应该交给useEffect处理。

    回到开篇的例子:

    当你希望状态a变化后发起请求,首先应该明确,你的需求是:

    状态a变化,接下来需要发起请求

    还是

    某个用户行为需要发起请求,请求依赖状态a作为参数?

    如果是后者,这是用户行为触发的副作用,那么相关逻辑应该放在Event handlers中。

    假设之前的代码逻辑是:

    • 点击按钮,触发状态a变化

    • useEffect执行,发送请求

    应该修改为:

    • 点击按钮,在事件回调中获取状态a的值

    • 在事件回调中发送请求

    经过这样修改,状态a变化与发送请求之间不再有因果关系,后续对状态a的修改不会再有无意间触发请求的顾虑。

    关于“React新文档滥用effect问题怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“React新文档滥用effect问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    React新文档滥用effect问题怎么解决

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    React新文档滥用effect问题怎么解决

    这篇文章主要介绍了React新文档滥用effect问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React新文档滥用effect问题怎么解决文章都会有所收获,下面我们一起来看看吧。引言你或你的同事在
    2023-07-02

    右键无法新建TXT文档的问题解决

    方法如下: 第一种方法:临时解决,但没有彻底的解决,使用起来不是很方便,却可以解决问题。首先,打开开始菜javascript单中的运行,在运行文本框中键入notepad.exe 然后,在出现TXT文本后,把它另存为桌面上,接着使用右键新建即
    2023-05-25

    React中useEffect使用问题怎么解决

    本篇内容介绍了“React中useEffect使用问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近看了一下 ant-des
    2023-07-02

    react跨域问题怎么解决

    在 React 中解决跨域问题通常有以下几种方法:1. 设置代理:在开发环境中,可以通过设置代理服务器来解决跨域问题。可以在 `package.json` 文件中的 `proxy` 字段中添加代理服务器的地址,例如:```"proxy":
    2023-08-19

    Asp.Net在线预览Word文档问题怎么解决

    这篇文章主要讲解了“Asp.Net在线预览Word文档问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Asp.Net在线预览Word文档问题怎么解决”吧!项目特点Asp.Net不带
    2023-06-30

    react usestate异步问题怎么解决

    在React中,useState钩子是同步的,它不会自动处理异步操作。因此,当遇到需要在useState之后执行异步操作的情况时,可以采用以下方法解决:1. 使用useEffect钩子:可以在useEffect中执行异步操作,并在异步操作完
    2023-10-07

    win11新建不了文本文档怎么解决

    这篇文章主要讲解了“win11新建不了文本文档怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win11新建不了文本文档怎么解决”吧!方法一: 1、首先点开下面的“开始菜单”2、在上方
    2023-07-02

    react异步渲染问题怎么解决

    在React中,可以使用异步渲染来优化性能并提升用户体验。有几种方式可以解决React异步渲染问题:1. 使用React.lazy和Suspense:React.lazy函数可以让你像渲染常规组件一样渲染动态导入的组件。Suspense组件
    2023-08-19

    怎么解决React中的re-render问题

    这篇文章主要介绍“怎么解决React中的re-render问题”,在日常操作中,相信很多人在怎么解决React中的re-render问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决React中的re
    2023-06-29

    React和Vue项目问题怎么解决

    本篇内容主要讲解“React和Vue项目问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React和Vue项目问题怎么解决”吧!组件库的样式覆盖不掉,这应该是很多前端在工作中遇到过的问
    2023-06-30

    React操作DOM之forwardRef问题怎么解决

    本篇内容主要讲解“React操作DOM之forwardRef问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React操作DOM之forwardRef问题怎么解决”吧!React操作D
    2023-07-05

    windows更新出问题怎么解决

    如果Windows更新出现问题,有几种方法可以尝试解决:1. 重新启动电脑:有时候只需要重新启动电脑就可以解决更新问题。2. 检查网络连接:确保你的电脑已连接到可靠的网络,并且网速稳定。如果网络连接不稳定,可以尝试连接到其他网络或使用有线连
    2023-09-11

    React之useEffect依赖引用类型问题怎么解决

    本文小编为大家详细介绍“React之useEffect依赖引用类型问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“React之useEffect依赖引用类型问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
    2023-07-05

    React竞态条件Race Condition问题怎么解决

    本篇内容主要讲解“React竞态条件Race Condition问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React竞态条件Race Condition问题怎么解决”吧!竞态条件
    2023-07-04

    React竞态条件Race Condition问题怎么解决

    React中的竞态条件(Race Condition)问题通常发生在异步操作中,当多个异步操作同时修改同一个状态时可能会导致不确定的结果。为了解决这个问题,可以采取以下几种方法:1. 使用回调函数:可以在每个异步操作完成后调用回调函数,确保
    2023-08-15

    如何解决windows系统中右键无法新建TXT文档的问题

    本篇文章给大家分享的是有关如何解决windows系统中右键无法新建TXT文档的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法如下: 第一种方法:临时解决,但没有彻底的解
    2023-06-14

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录