防止重新渲染在包装组件中启动 useState 的同级组件

2024-02-04

我对 React 不太有经验,但我有一个非常简单的设置。

export default function App() {
  const [title, setTitle] = useState("still-empty");

  const myFunction = title => {
    setTitle(title);
  };

  return (
    <div className="App">
      <ComponentA myFunction={myFunction} />
      <br />
      <br />
      <ComponentB title={title} />
    </div>
  );
}



const ComponentA = ({ myFunction }) => {
  console.log("Rendering Component A");

  return (
    <div onClick={() => myFunction(Math.random() * 1000)}> Component A </div>
  );
};

export default ComponentA;


const ComponentB = ({ title }) => {
  return <div> Title : {title}</div>;
};

export default ComponentB;

这是一个沙箱来测试这一点:https://codesandbox.io/s/musing-cookies-g7szr https://codesandbox.io/s/musing-cookies-g7szr

请注意,如果您单击“ComponentA”,尽管该组件上没有更改任何 props,但该 ComponentA 会被重新渲染(您可以在控制台中看到它)。这是我的真实用例的简化示例。在我的实际用例中,ComponentA 是一个地图,其中有很多东西(缩放、居中) 将被重置。我想防止这些重置以及重新渲染所需的 1 秒。因此我提出这个简化的例子。

那么如何将信息从 ComponentA 传递到 Component,而不重新渲染 ComponentA 本身呢?感谢您在这里提供帮助。


use useCallback在 Parent 中,这样该函数就不会一次又一次地创建,而仅在初始渲染时创建。 使用React.memo这样,当没有更改 props 时,组件就不会重新渲染。

App

export default function App() {
  const [title, setTitle] = useState("still-empty");

  const myFunction = useCallback(title => {
    setTitle(title);
  }, []);

  return (
    <div className="App">
      <ComponentA myFunction={myFunction} />
      <br />
      <br />
      <ComponentB title={title} />
    </div>
  );
}

组分A

import React, { memo } from "react";

const ComponentA = ({ myFunction }) => {
  console.log("Rendering Component A");

  return (
    <div onClick={() => myFunction(Math.random() * 1000)}> Component A </div>
  );
};

export default memo(ComponentA);

工作演示在这里:https://codesandbox.io/s/affectionate-boyd-v7g2t?file=/src/App.js https://codesandbox.io/s/affectionate-boyd-v7g2t?file=/src/App.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止重新渲染在包装组件中启动 useState 的同级组件 的相关文章

  • 在React组件中使用的字符串变量中插入html

    我正在为我的投资组合网站构建一个反应应用程序 目前我已经用 JSX 编写了应用程序 因此我可以添加以下内容 class Project extends React Component render return div h1 this pr
  • AWS JS SDK TypeError:STS 不是构造函数

    我有一个 ReactJS 应用程序 它使用 aws sdk 进行认知登录 我用了yarn安装所有模块 但是当我尝试访问 localhost 的网站时 出现 JS 错误 未捕获 承诺中 类型错误 STS 不是构造函数 错误指向该行aws sd
  • 如何在ReactJS中定义常量

    我有一个将文本映射到字母的函数 sizeToLetterMap function return small square s large square q thumbnail t small 240 m small 320 n medium
  • useEffect 中的 setTimeout 函数输出缓存的状态值

    这很简单 我正在使用 Redux 来管理我的状态 我有一个setTimeout函数在一个useEffect功能 The setTimeout超时值为50000ms 我想要 SetTimeout 处理程序做什么 After 50000ms t
  • 如何将 Twitter 小部件嵌入到 Reactjs 中?

    前往 Twitter 小部件网站 https publish twitter com https publish twitter com 我可以获得一个小部件添加到我的网站 我正在使用示例代码来尝试了解它的工作原理 a class twit
  • React this.state 未定义?

    我正在遵循 Pluralsight 的初学者教程 在表单提交时将值传递给addUser组件方法 我需要将 userName 推送到this state users但我收到错误 App jsx 14 Uncaught TypeError Ca
  • 自定义 SVG 未加载到我的图像标签中

    目前我正在尝试将自定义 svg 组件加载到图像标签内 但由于某种原因 我无法看到地图组件内的 svg 图像 我的自定义 SVG 文件如下所示 我在 SVG 中加载另一个图像
  • 如何使用 React 获取查询字符串?

    我试图从网址获取 query 123 http localhost 3000 query 123 http localhost 3000 query 123 Tried App js const search this props loca
  • React 中的变异状态有哪些缺点?

    我有一个带有顶级组件和许多嵌套子组件的 React 应用程序 顶级组件是唯一具有状态的组件 该状态采用单个变量的形式 this state g new BlackJackGame g 包含一个复杂的数据结构 class BlackJackG
  • 如何使用 htaccess 将所有请求重定向到反应或角度索引?

    我正在使用react router 在react 中创建一个应用程序 早些时候 我对 Angular 做了同样的事情 但在这两种情况下 如果用户为 URL 添加书签并直接加载它 它将显示 404 错误 我们可以在 htaccess 中创建这
  • 在 React 中使用 .less 文件

    我正在尝试将 less 文件与极简主义 React 应用程序一起使用 使用创建反应应用程序 我已经添加less and less loader to my 包 json以及我的模块规则webpack config js文件 然而 类引用并未
  • 下一张图片不采用类属性

    我正在使用 Next js 和next image显示图像 但 CSS 在其中不起作用 该图像是 SVG 格式 我已将其放在公共文件夹中 我正在使用 Tailwind CSS 与此一起使用
  • 在 Chrome 中使用 React 添加新的 DOM 项目不会保持预期的滚动位置

    在 React 中向状态数组添加新项目时 我遇到了一个意外的问题 这会导致更多项目被添加到 DOM 中 在 Safari 和 Firefox 中 这会导致新的 DOM 项目添加到折叠下方 我必须向下滚动才能看到新项目 在 Chrome 中
  • Redux 减速器的副作用

    Redux 减速器应该没有副作用 但是 如果某个操作应该触发浏览器中文件的下载 其中内容基于商店的状态 该怎么办 这当然应该算作副作用吗 像下面这样的方法可以吗 还是我应该寻找替代方法 case SAVE GRID const json s
  • React App 中的图像损坏

    我正在尝试访问 React 应用程序中的图像 当我运行代码时 我在网页上看到一个损坏的图像图标 我不确定我是否正在访问图像的正确路径 我的代码如下 import React Component from react class Header
  • 如何在react-三纤维中提取并播放动画

    嗯 我有 gltf 动画模型 我成功加载模型 但无法播放嵌入的动画 我想知道是否可以以任何方式解决它 顺便说一句 我正在反应中工作 先感谢您 在这里您可以找到型号https drive google com file d 1ZVyklaQu
  • 在不同环境中运行的react.js redux生产构建中将环境变量渲染到浏览器

    React redux realworld io 应用程序的自述文件位于https github com gothinkster react redux realworld example app https github com goth
  • 如何在 Gatsby 页面上包含本地 JavaScript?

    我是一个完全的 React 新手 我想这里有些基本的东西我不太明白 默认的 Gatsby 页面如下所示 有没有办法像这样使用本地 js 文件 我想要实现的是让反应忽略script js但仍然让客户端使用它 默认的 Gatsby 页面看起来像
  • 如何发送和接收大型 JSON 数据

    我对全栈开发比较陌生 目前正在尝试找出一种有效的方法send and fetch我的前端 React 和后端 Express 之间存在大量数据 同时最大限度地减少内存使用 具体来说 我正在构建一个地图应用程序 它需要我处理大型 JSON 文
  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori

随机推荐

  • 带有 sourcemap 的 Webpack 无法解析生产模式下的变量

    我想使用 Webpack 为我们的生产构建生成源映射 我设法生成它 但是当我在调试器中的断点处停止时 变量未解析 我究竟做错了什么 如何生成一个源映射 让 chrome devtools 在我停止在调试器中的断点处时解析变量 这些是我的 w
  • find_library 或 link_directories 或 find_package?什么是更好的方法?错误 - 使用 cmake 链接库

    Given文件 usr lib gstreamer 0 10 libgstffmpeg so存在在 CMakeLists txt 中进行更改 方法一 find library find library GST FFMPEG 名称 gstff
  • 在数据库中存储数组

    我想知道在数据库中存储数组是否真的是好的做法 我倾向于使用json encode而不是serialize 但只是想知道这是否是一个好主意 如果没有 那么我可以做一些小的更改 然后用逗号将数组内爆 不 这是一种可怕的做法 请不要插入 CSV
  • 方法中的方法

    我正在创建一个带有一些可重用代码的 C 库 并尝试在方法内创建一个方法 我有一个这样的方法 public static void Method1 Code 我想做的是这样的 public static void Method1 public
  • 非本地类型上具有多个条件的 GDB 断点

    我正在调试一个 C C 程序 我想在其中设置一个断点 其条件取决于多个变量 中断 foo cpp 60 if bar 3 i 5 这似乎不起作用 因为它会在遇到 foo cpp 60 时停止 而不是在两个条件匹配时停止 它甚至不匹配其中一个
  • Symfony 3.3 将存储库注入服务

    我有一个包 它保存在私有 Satis 存储库中 因为它的实体和存储库在多个应用程序之间共享 使用该捆绑包的其余应用程序是 Symfony 2 7 和 2 8 应用程序 我正在开发一个新应用程序 要求使用 Symfony 3 3 在 symf
  • 为什么在控制台应用程序中使用 async/await 时需要 AsyncContext?

    我在控制台应用程序中调用异步方法 我不希望应用程序在启动后不久即退出 即在可等待的任务完成之前退出 看来我可以这样做 internal static void Main string args try Task WaitAll DoThis
  • 全局禁用实体框架中的动态代理

    请问如何禁用 Entity Framework 5 中创建的所有实体的动态代理 目前 我正在设置这个espEntities Configuration ProxyCreationEnabled false 在每一个实例中DbContext有
  • 使用柱形图而非蜡烛图的 OHLC 图表的 GGPlot

    我正在研究 R 中的 ggplot 并尝试创建股票图表 我已经能够创建烛台图 现在我想制作条形图 它由一条从低价到高价的垂直线组成 然后 线的左边是开盘价 右边是收盘价 我不知道如何添加这个勾号 我能想到的最接近的东西是 geom erro
  • 如何接受文件 POST

    我正在使用 asp net mvc 4 webapi beta 来构建休息服务 我需要能够接受来自客户端应用程序的发布的图像 文件 使用 webapi 可以吗 以下是我目前正在使用的操作方式 有谁知道这个例子应该如何工作 HttpPost
  • 将地址转换为坐标

    有没有办法用 bing 地图将地址转换为坐标 Thank 从地址到纬度 经度坐标的过程通常称为地理编码 这篇博文有一些使用 Bing 的 WP7 的很好的示例代码 http www braincastexception com wp7 we
  • 如何将 RGB 或 HEX 颜色代码分组为更大的颜色组集?

    我正在分析大量图像并提取主要颜色代码 我想将它们分组为通用颜色名称范围 例如绿色 深绿色 浅绿色 蓝色 深蓝色 浅蓝色等 我正在寻找一种与语言无关的方式来自己实现一些东西 如果有我可以研究的例子来实现这一点 我将非常感激 在机器学习领域 你
  • 在 Apple iAP 中哪里可以找到有关 SSServerErrorDomain 的说明?

    我们有一个应用程序 它收集了一些来自 Apple iAP 购买的错误代码 在collect dashboard中 我们看到一些错误代码报告 但找不到确切的含义 例如 SSServerErrorDomain 2004 SSServerErro
  • ImportError:无法导入名称 ABCMeta - Linux 上 PyDev 中的 Python 错误

    我在 Linux 上使用 PyDev 编写代码时遇到了这个奇怪的错误 即使像这样的简单代码也会产生错误 print Hello World 错误就在这里 True Traceback most recent call last File u
  • 如何在 Windows Phone 8 应用程序中检查互联网连接可用性

    我正在开发Windows Phone 8 应用程序 在此应用程序中 我必须连接到服务器才能获取数据 因此 在连接到服务器之前 我想检查设备的互联网连接是否可用 如果互联网连接可用 那么只有我会从服务器获取数据 否则我会显示错误消息 请告诉我
  • AWS 放大在公共目录中添加文件

    当我在放大选项中提供密钥时 我正在使用 AWS amplify 在 s3 存储桶中上传视频 它会创建一个公共文件夹 然后获取该密钥 Amplify Storage uploadFile user hello 123321 mp4 examp
  • Dropbox 应用只能与一个 Dropbox 帐户交互

    我的需要是有一个简单的网络表单 还可以让人们上传一些 pdf 文件 我认为我可以做的 由于上传文件的大小和数量 是将这个应用程序的后端绑定到我的 dropbox 帐户或我的 box com 帐户 这两种服务都提供类似的 API 来构建应用程
  • 在 JavaScript 中将音频从 getUserMedia() 编码为 .OGG [重复]

    这个问题在这里已经有答案了 我正在开发一个 HTML5 项目 将 iOS 应用程序转换为基于 Web 的应用程序 应用程序内容创建的一部分是录音 我尝试在 JavaScript 中复制它而不使用插件 到目前为止 我已经能够从 getUser
  • java xpath从xml中删除元素

    我正在尝试从 xml 文件中删除元素和子元素 特别是名为 Testlogging 的附加程序 首先 这是我的 xml 文件的外观
  • 防止重新渲染在包装组件中启动 useState 的同级组件

    我对 React 不太有经验 但我有一个非常简单的设置 export default function App const title setTitle useState still empty const myFunction title