iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >React组件状态下移和内容提升怎么实现
  • 478
分享到

React组件状态下移和内容提升怎么实现

2023-07-04 16:07:02 478人浏览 薄情痞子
摘要

本篇内容介绍了“React组件状态下移和内容提升怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言两个简单实用的优化组件渲染性能的方

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

前言

两个简单实用的优化组件渲染性能的方法:

  • 状态下移

  • 内容提升

在讲解这两种方法之前,我们需要先手动创建一个有严重渲染性能的组件,如下所示:

import { useState } from 'react';export default function App() {  let [color, setColor] = useState('red');  return (    <div>      <input value={color} onChange={(e) => setColor(e.target.value)} />      <p style={{ color }}>Hello, world!</p>      <ExpensiveTree />    </div>  );}function ExpensiveTree() {  let now = perfORMance.now();  while (performance.now() - now < 100) {    // Artificial delay -- do nothing for 100ms  }  return <p>I am a very slow component tree.</p>;}

很显然,当 App 组件内的状态发生了改变,ExpensiveTree 组件会 re-render, 事实上 ExpensiveTree 组件的 props、state 并未发生改变,这并不是我们期望的结果,下面将提供两种简单的方法,提升组件渲染的性能;

状态下移

export default function App() {  let [color, setColor] = useState('red');  return (    <div>      <input value={color} onChange={(e) => setColor(e.target.value)} />      <p style={{ color }}>Hello, world!</p>      <ExpensiveTree />    </div>  );}

我们可以看到以上 ExpensiveTree 组件并不依赖 App 组件内部的状态,因此我们是否可以考虑,将依赖 color 的元素抽离到一个依赖 color 的组件中呢?
下面是实践后的代码:

export default function App() {  return (    <>      <Form />      <ExpensiveTree />    </>  );}function Form() {  let [color, setColor] = useState('red');  return (    <>      <input value={color} onChange={(e) => setColor(e.target.value)} />      <p style={{ color }}>Hello, world!</p>    </>  );}

此时,将依赖 color 的元素提取到了 Form 组件中,Form 组件内部的状态不再影响 ExpensiveTree 组件的渲染,问题便得到了解决

内容提升

export default function App() {  let [color, setColor] = useState('red');  return (    <div style={{ color }}>      <input value={color} onChange={(e) => setColor(e.target.value)} />      <p>Hello, world!</p>      <ExpensiveTree />    </div>  );}

以上情况是高开销组件 ExpensiveTree 的父节点依赖 color,此时显然状态下移是行不通的,但是还有另外一种办法:

export default function App() {  return (    <ColorPicker>      <p>Hello, world!</p>      <ExpensiveTree />    </ColorPicker>  );}function ColorPicker({ children }) {  let [color, setColor] = useState("red");  return (    <div style={{ color }}>      <input value={color} onChange={(e) => setColor(e.target.value)} />      {children}    </div>  );}

此时和状态提升是完全相反的,将依赖 color 的元素提升到了 ColorPicker 组件中,而不依赖 color 的元素以 children prop 的形式传入了 ColorPicker ,当组件内部的状态改变时:

  • ColorPicker 会重新渲染但是它仍然保存着

  • ColorPicker 的 children 属性未变化 React 并不会访问那棵子树。 因此,ExpensiveTree不会重新渲染。

“React组件状态下移和内容提升怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: React组件状态下移和内容提升怎么实现

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

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

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

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

下载Word文档
猜你喜欢
  • React组件状态下移和内容提升怎么实现
    本篇内容介绍了“React组件状态下移和内容提升怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言两个简单实用的优化组件渲染性能的方...
    99+
    2023-07-04
  • React远程动态组件怎么实现
    这篇文章主要介绍了React远程动态组件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React远程动态组件怎么实现文章都会有所收获,下面我们一起来看看吧。远程动态组件实现远程动态组件库远程动态组件库项...
    99+
    2023-07-05
  • React中怎么实现组件内部通信
    React中怎么实现组件内部通信,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。2. 组件内部数据传递React 组件内部通信主要分为两部分...
    99+
    2024-04-02
  • Vue和React组件怎么实现传值
    本篇文章为大家展示了Vue和React组件怎么实现传值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。组件间的传值方式组件的传值场景无外乎以下几种:父子之间兄弟之间多...
    99+
    2024-04-02
  • JS怎么实现双击内容变为可编辑状态功能
    这篇文章主要介绍JS怎么实现双击内容变为可编辑状态功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码部分:注意:设置选择文本的内容或设置光标位置<!DOCTYPE ...
    99+
    2024-04-02
  • Java怎么实现提取QSV文件视频内容
    今天小编给大家分享一下Java怎么实现提取QSV文件视频内容的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。创建类第一步新建一...
    99+
    2023-07-05
  • linux下怎么实现批量替换文件内容
    这篇文章主要讲解了“linux下怎么实现批量替换文件内容”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下怎么实现批量替换文件内容”吧!对于单个文件,使用sed命令很容易做到。如果需...
    99+
    2023-06-13
  • 怎么在React中实现父组件和子组件的数据传输
    怎么在React中实现父组件和子组件的数据传输?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、父组件向子组件传递数据父组件向子组件传递数据是通过在父组件中引用子组件时,在子组...
    99+
    2023-06-14
  • Node.js怎么实现逐行读取和写入文件内容
    本篇内容介绍了“Node.js怎么实现逐行读取和写入文件内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是ReadlineReadli...
    99+
    2023-07-04
  • Python怎么实现发送声情并茂的邮件内容和附件
    1.准备工作在开始之前,我们需要准备一些东西。首先,我们需要安装Python。Python可以从官方网站下载。其次,我们需要安装smtplib库。这可以通过以下命令在终端中完成:pip install smtplib2.创建电子邮件在发送电...
    99+
    2023-05-18
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作