iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >React中useEffect使用问题怎么解决
  • 448
分享到

React中useEffect使用问题怎么解决

2023-07-02 13:07:26 448人浏览 薄情痞子
摘要

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

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

前言

最近看了一下 ant-design 中的 tree 组件源码时发现 useEffect 中根据 props 来计算当前函数组件的 state 的,感到好奇,因为这样会导致应用重新绘制一次,这样才复杂场景下会对应用有一定的性能影响。为了验证自己猜想是否正确做了一下实践。这里的 React 是官方 16.12.0的源码。

优化

import * as React from './react-source/packages/react'import * as ReactDOM from './react-source/packages/react-dom'const root = document.getElementById('root');function Foo({number}) {  const [number2, setNumber2] = React.useState(0);  React.useEffect(() => {    setNumber2( number + 1)  }, [number])  return <div>   {number2 % 2 === 0 && <div>{number2}</div>}    <button onClick={() => setNumber2(number2 + 1)}>更新 number2</button>  </div>}function App() {  const [number1,setNumber1] = React.useState(1);  return <>   {number1 % 2 === 0  &&  <div>{number1}</div>}    <Foo number={number1}/>    <button onClick={() => setNumber1(number1 + 1)}>更新 number1</button>  </>} ReactDOM.render(<App/>, root)

这里有两个组件, APP 函数组件有一个 number1 的 state,并作用 Foo 函数组件的 number props传递给子组件。Foo 子组件在 useEffect 中 依赖 number 的变化来更新该组件的 number2 state。

为了监听 root 节点变化的情况我使用了 MutationObserver api 来看看监听回调函数执行了多少次,所以在测试代码中增加了如下代码

const root = document.getElementById('root');const observer = new MutationObserver(mutations =&gt; {  console.log(mutations)} )observer.observe(root, {  childList: true,  subtree: true})

来看一下第一渲染时界面输出的效果

React中useEffect使用问题怎么解决

可以看到 MutationObserver 回调被执行了两次, mutations 中有两项新增记录,对应 root 的新增两个子节点。现在再看看我点【更新number1】按钮之后的结果

React中useEffect使用问题怎么解决

可以看到 MutationObserver 这个回调被执行了两次,也就是但这个按钮的时候页面绘制了两次。

优化后

import * as React from './react-source/packages/react'import * as ReactDOM from './react-source/packages/react-dom'const root = document.getElementById('root');const observer = new MutationObserver(mutations => {  console.log(mutations)} )observer.observe(root, {  childList: true,  subtree: true})function Foo({number2,setNumber2}) {  return <div>   {number2 % 2 === 0 && <div>{number2}</div>}    <button onClick={() => setNumber2(number2 + 1)}>更新 number2</button>  </div>}function App() {  const [number1,setNumber1] = React.useState(1);    const [number2, setNumber2] = React.useState(0);  return <>   {number1 % 2 === 0  &&  <div>{number1}</div>}    <Foo number2={number2} setNumber2={setNumber2}/>    <button onClick={() => {        let newNumber1 = number1 + 1       setNumber1(newNumber1)       setNumber2(newNumber1 + 1)    }}>更新 number1</button>  </>} ReactDOM.render(<App/>, root)

优化有的代码就是把 Foo 状态提升到父组件中,然后把状态以及更新函数传给子组件就行。这样我们再来看一下点击【更新number1】之后的效果图

React中useEffect使用问题怎么解决

“React中useEffect使用问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: React中useEffect使用问题怎么解决

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • React中useEffect使用问题怎么解决
    本篇内容介绍了“React中useEffect使用问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近看了一下 ant-des...
    99+
    2023-07-02
  • 关于 React 中 useEffect 使用问题浅谈
    目录前言优化前优化后总结前言 最近看了一下 ant-design 中的 tree 组件源码时发现 useEffect 中根据 props 来计算当前函数组件的 state 的,感到好...
    99+
    2024-04-02
  • React之useEffect依赖引用类型问题怎么解决
    本文小编为大家详细介绍“React之useEffect依赖引用类型问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“React之useEffect依赖引用类型问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-05
  • 怎么解决React useEffect钩子带来的无限循环问题
    本篇内容主要讲解“怎么解决React useEffect钩子带来的无限循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决React useEffect钩子带来的无...
    99+
    2023-07-02
  • React使用useEffect解决setState副作用详解
    目录介绍一下APIfetch()方法访问APIsetState的副作用使用useEffect解决这个问题使用useEffect操控函数运行介绍一下API 本文主要内容:描述了setS...
    99+
    2022-11-13
    React useEffect解决setState React useEffect setState
  • React useEffect的理解与使用
    目录避免重复循环渲染 关于副作用的清除 React16.8新增的useEffec这个hook函数就是处理副作用的。 所谓的“副作用”,举个通俗一点的例子,假如感冒了本来吃点药就没事了...
    99+
    2024-04-02
  • React如何使用useEffect解决setState副作用
    本篇内容主要讲解“React如何使用useEffect解决setState副作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用useEffect解决setState副作用”吧!...
    99+
    2023-07-04
  • React-hooks中的useEffect使用步骤
    目录1.理解函数副作用什么是副作用常见的副作用2.基础使用使用步骤示例代码3.依赖项控制useEffect 永远是在 DOM渲染完成之后执行 1.理解函数副作用 什么是副作用 对于R...
    99+
    2024-04-02
  • 怎么解决React中的re-render问题
    这篇文章主要介绍“怎么解决React中的re-render问题”,在日常操作中,相信很多人在怎么解决React中的re-render问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决React中的re...
    99+
    2023-06-29
  • react中使用useEffect及踩坑记录
    目录使用useEffect及踩坑记录useEffect 介绍useEffect常见跳坑hooks中useEffect()使用总结常见使用useEffect() 的第二个参数说明use...
    99+
    2022-11-13
    react使用useEffect useEffect踩坑 使用useEffect踩坑
  • react跨域问题怎么解决
    在 React 中解决跨域问题通常有以下几种方法:1. 设置代理:在开发环境中,可以通过设置代理服务器来解决跨域问题。可以在 `pa...
    99+
    2023-08-19
    react
  • 在React中使用Redux解决的问题小结
    目录在 React 中使用 Redux 解决的问题在 React 项目中加入 Redux 的好处React + Redux 安装 ReduxReact 中 Redux 的工作流程Re...
    99+
    2022-11-13
    React + Redux 案例 React 使用 Redux
  • 解决react-connect中使用forwardRef遇到的问题
    目录react-connect使用forwardRef遇到的问题项目场景原因问题描述解决方案React.forwardRef的使用说明应用场景但问题来了总结react-connect...
    99+
    2023-05-20
    react-connect使用forwardRef 使用forwardRef遇到问题 react-connect使用forwardRef问题
  • React中使用react-file-viewer问题
    目录使用react-file-viewerreact-file-viewer预览本地文件解决思路使用react-file-viewer 1.npm install react-fil...
    99+
    2024-04-02
  • react usestate异步问题怎么解决
    在React中,useState钩子是同步的,它不会自动处理异步操作。因此,当遇到需要在useState之后执行异步操作的情况时,可...
    99+
    2023-10-07
    react
  • 解决React中的re-render问题
    目录re-render?错误的优化Object.is合理使用useEffect,解决re-render简单实现useEffect文章转自公众号:前端巅峰 re-render? 首先使...
    99+
    2024-04-02
  • React中hook函数与useState及useEffect的使用
    目录1. 简介2. useState使用3. useEffect使用useEffect发起网络请求1. 简介 在 React 的世界中,有容器组件和 UI 组件之分,在 React ...
    99+
    2024-04-02
  • React新文档滥用effect问题怎么解决
    这篇文章主要介绍了React新文档滥用effect问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React新文档滥用effect问题怎么解决文章都会有所收获,下面我们一起来看看吧。引言你或你的同事在...
    99+
    2023-07-02
  • 关于useEffect执行两次的问题及解决
    目录useEffect执行两次问题父组件里面 子组件里面react使用useEffect及踩坑useEffect 介绍重要理解useEffect常见跳坑useEffect执...
    99+
    2024-04-02
  • React和Vue项目问题怎么解决
    本篇内容主要讲解“React和Vue项目问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React和Vue项目问题怎么解决”吧!组件库的样式覆盖不掉,这应该是很多前端在工作中遇到过的问...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作