返回顶部
首页 > 资讯 > 精选 >React新文档滥用effect问题怎么解决
  • 595
分享到

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

2023-07-02 15:07:50 595人浏览 独家记忆
摘要

这篇文章主要介绍了React新文档滥用effect问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

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

    本文链接: https://lsjlt.com/news/342985.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • React新文档滥用effect问题怎么解决
      这篇文章主要介绍了React新文档滥用effect问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React新文档滥用effect问题怎么解决文章都会有所收获,下面我们一起来看看吧。引言你或你的同事在...
      99+
      2023-07-02
    • React新文档切记不要滥用effect
      目录引言一些理论知识处理副作用总结引言 你或你的同事在使用useEffect时有没有发生过以下场景: 当你希望状态a变化后发起请求,于是你使用了useEffect: useEffec...
      99+
      2024-04-02
    • React新文档切记不要滥用Ref
      目录引言为什么是逃生舱?失控的Ref如何限制失控人为取消限制useImperativeHandle总结引言 React新文档有个很有意思的细节:useRef、useEffect这两个...
      99+
      2024-04-02
    • 右键无法新建TXT文档的问题解决
      方法如下: 第一种方法:临时解决,但没有彻底的解决,使用起来不是很方便,却可以解决问题。首先,打开开始菜单中的运行,在运行文本框中键入notepad.exe 然后,在出现TXT文本后,把它另存为桌面上,接着使用右键新建即...
      99+
      2023-05-25
      右键 新建TXT TXT 问题 文档
    • React中useEffect使用问题怎么解决
      本篇内容介绍了“React中useEffect使用问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近看了一下 ant-des...
      99+
      2023-07-02
    • react跨域问题怎么解决
      在 React 中解决跨域问题通常有以下几种方法:1. 设置代理:在开发环境中,可以通过设置代理服务器来解决跨域问题。可以在 `pa...
      99+
      2023-08-19
      react
    • Asp.Net在线预览Word文档问题怎么解决
      这篇文章主要讲解了“Asp.Net在线预览Word文档问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Asp.Net在线预览Word文档问题怎么解决”吧!项目特点Asp.Net不带...
      99+
      2023-06-30
    • react usestate异步问题怎么解决
      在React中,useState钩子是同步的,它不会自动处理异步操作。因此,当遇到需要在useState之后执行异步操作的情况时,可...
      99+
      2023-10-07
      react
    • Golang文档乱码问题解决方法
      Golang作为一门新兴的编程语言,备受广大程序员的青睐。然而,与其他编程语言不同的是,Golang的官方文档中经常出现乱码问题,给大家的学习和使用带来了很多不便。本文将从以下几个方面探讨Golang文档乱码问题的原因和解决方法。一、原因分...
      99+
      2023-05-14
    • win11新建不了文本文档怎么解决
      这篇文章主要讲解了“win11新建不了文本文档怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win11新建不了文本文档怎么解决”吧!方法一: 首先点开下面的“开始菜单”在上方搜索看看...
      99+
      2023-07-02
    • 怎么解决react link不跳转问题
      这篇文章主要介绍了怎么解决react link不跳转问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 reac...
      99+
      2024-04-02
    • 怎么解决React中的re-render问题
      这篇文章主要介绍“怎么解决React中的re-render问题”,在日常操作中,相信很多人在怎么解决React中的re-render问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决React中的re...
      99+
      2023-06-29
    • React和Vue项目问题怎么解决
      本篇内容主要讲解“React和Vue项目问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React和Vue项目问题怎么解决”吧!组件库的样式覆盖不掉,这应该是很多前端在工作中遇到过的问...
      99+
      2023-06-30
    • react异步渲染问题怎么解决
      在React中,可以使用异步渲染来优化性能并提升用户体验。有几种方式可以解决React异步渲染问题:1. 使用React.lazy和...
      99+
      2023-08-19
      react
    • xxl-job如何滥用netty导致的问题及解决方案
      目录一、xxl-job存在的多端口问题二、源码追踪三、使用spring-mvc替换netty的功能四、测试五、实际使用netty作为一种高性能的网络编程框架,在很多开源项目中大放异彩...
      99+
      2024-04-02
    • 解决Swagger修改请求对象字段文档不更新问题
      目录解决方法描述解决方法 有两个对象用了同一个@ApiModel的value值 描述 今天发现不管怎么修改如下对象,接口显示总是不变 @Data @NoArgsConstructor...
      99+
      2024-04-02
    • 解决swagger2.9.2接口文档显示的问题
      swagger2.9.2接口文档显示 swagger版本:2.9.2 框架:springboot2.1.2 当没有使用 @ApiImplicitParam和response=Resp...
      99+
      2024-04-02
    • React操作DOM之forwardRef问题怎么解决
      本篇内容主要讲解“React操作DOM之forwardRef问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React操作DOM之forwardRef问题怎么解决”吧!React操作D...
      99+
      2023-07-05
    • 如何解决react-router browserHistory刷新页面404问题
      这篇文章主要介绍如何解决react-router browserHistory刷新页面404问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景使用webpack-dev-serv...
      99+
      2024-04-02
    • 解决react中useState状态异步更新的问题
      目录疑惑状态异步更新带来的问题问题示例问题解决类组件的解决方案函数组件的解决方案其他解决方案结尾疑惑 相信刚开始使用react函数组件的小伙伴也遇到过一个坑,就是 useState ...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作