React Hooks - 即使状态没有改变,useEffect 也会触发

2024-01-02

我在组件内设置了一个效果,如果另一个状态属性发生变化,它会更改视图。但由于某种原因,当组件安装时,效果会运行,即使值detailIndex没有改变。

const EventsSearchList = () => {
    const [view, setView] = useState('table');
    const [detailIndex, setDetailIndex] = useState(null);

    useEffect(() => {
        console.log('onMount', detailIndex);
        // On mount shows "null"
    }, []);


    useEffect(
        a => {
            console.log('Running effect', detailIndex);
            // On mount shows "null"!! Should not have run...
            setView('detail');
        },
        [detailIndex]
    );

    return <div>123</div>;

};

为什么会发生这种情况?

UPDATE:如果不清楚,我正在尝试的是在组件更新时运行效果,因为detailIndex变化。不是安装时。


useEffect默认情况下,React Hooks 会在每次渲染时执行,但您可以使用函数中的第二个参数来定义何时再次执行效果。这意味着该函数是always在挂载上执行。根据你的情况,你的第二个useEffect将在开始时运行detailIndex变化。

更多信息:https://reactjs.org/docs/hooks-effect.html https://reactjs.org/docs/hooks-effect.html

Source:

经验丰富的 JavaScript 开发人员可能会注意到,传递给 useEffect 的函数在每次渲染时都会有所不同。 [...] 如果某些值在重新渲染之间没有更改,您可以告诉 React 跳过应用效果。为此,请将数组作为可选的第二个参数传递给 useEffect: [...]

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

React Hooks - 即使状态没有改变,useEffect 也会触发 的相关文章

  • ReactJS - 监视访问令牌过期

    在我的应用程序中 我有一个访问令牌 Spotify 的 该令牌必须始终有效 当此访问令牌过期时 应用程序必须每 60 分钟访问刷新令牌端点并获取另一个访问令牌 授权功能 出于安全原因 这两个电话 get token and refresh
  • 每当用户单击动态 url ReactJS 时如何渲染到页面?

    我想要解决的是 每当用户单击动态网址时如何呈现到特定页面 更具体地说 有我的 product list api 数据 在 product list api数据中 有一个关键的 url 每当用户单击此 url 时 用户将被重定向到另一个特定的
  • 在 jsx 中使用地图内的地图

    normalizedData map obj gt div div obj display date numberic div div isEmpty obj applicants obj map obj2 gt div obj2 pers
  • React fetch 有错误 fetch 被 CORS 策略阻止 [重复]

    这个问题在这里已经有答案了 我尝试点击登录按钮调用获取 REST 调用 但是 问题是提取失败 并在 Javascript 控制台中显示此错误消息 从源获取的访问已被 CORS 策略阻止 请求的资源上不存在 Access Control Al
  • React Router 深度链接

    这是我第一次使用 React 和 React Router 我遇到了一些深层链接问题 我构建了一个简单的 SPA 在 React Router 的帮助下 我可以导航到 mysite com work mysite com about 和 m
  • 在节点模块文件夹中编辑react npm模块的代码

    是否可以更改 module 文件夹中 npm 模块的代码 我认为这不是推荐的做法 还有其他方法可以实现这一目标吗 目前 我尝试更改模块目录中的代码 但更改似乎并不适用 提前致谢 当然你可以改变包的内容node modules因为它是标准化格
  • 构建 iOS 项目失败。我们运行了“xcodebuild”命令,但它退出并显示错误代码 65

    我是反应原生开发的新手 我正在使用配备 M1 芯片的新款 MacBook Air M1 2020 我已经安装了以下依赖项 Node v14 15 3 Npm 6 14 9 Homebrew 2 7 0 react native cli 2
  • 如何禁用和隐藏反应表的分页页脚?

    我是反应表的新手 目前 我有一个 5 行表要在反应表上渲染 并且不需要分页功能 我了解关闭分页 可以通过以下方式完成 pagination false 但是分页控件仍然显示 有办法隐藏它吗 我刚刚找到道具showPagination fal
  • React Native动态webview高度

    我有 WebView 内容 它根据内容量改变它的高度 所以我找到了一种方法 如何通过document title属性onNavigationStateChange来获取内容的高度 看起来像这样 let html 以及 onNavigatio
  • ReactJS - 排序 - TypeError: 0 是只读的

    我试图在将对象映射到reactjs之前对其进行排序 但每次这样做时 我都会不断收到 TypeError 0 is read only 我注意到加载时 props 是空的 但即使当我试图检查数组的长度并且仅在它大于 0 时应用排序 或者当数组
  • MIME 多部分流意外结束。 MIME 多部分消息不完整。 Web API 和超级代理

    我在将文件从客户端上传到 Web api 时遇到问题 我收到此错误 MIME 多部分流意外结束 MIME 多部分消息不完整 当我尝试读取多部分内容时在控制器中 我正在使用 superagent 构建一个 React JS 客户端 这是我的请
  • 传递额外的参数来绑定?

    我有两个类似这样的函数 primaryImageLoaded this setState primaryImageLoaded true secondaryImageLoaded this setState secondaryImageLo
  • 为什么 npm install 失败并出现与 node-sass 相关的错误?

    我正在使用我继承的 Rails 应用程序 我正在尝试运行npm install命令但我不断收到errors以下 我尝试跑步npm rebuild node sass正如输出中所建议的 但它没有帮助 我遇到这个问题乌班图16也OS X gt
  • 如何在网页中渲染 Blender 模型?

    因此 我探索了在网络应用程序中渲染搅拌机模型的多种选项 现在我将模型导出为 gltf格式 这是我的代码 App js import React Suspense from react import App css import Model
  • 为 Final-form-arrays 中的数组提供初始值会导致状态更改重置整个表单,我该如何防止这种情况?

    我有一个使用最终表单数组的表单 表单有效且验证有效 但是 当我在组件内进行状态更改时 它会重置我的所有值 我能够使用react final form arrays提供的相同示例复制该问题 https codesandbox io embed
  • 在 React 中渲染来自 Firebase 的数据

    请帮助我渲染从 Firebase 实时数据库检索的数据 我成功从 Firebase 中以数组形式检索数据 下一步是显示数据 问题就从这里开始了 我想要显示的数据应该存储在 模块 状态 首先 它被设置为一个空数组 然后检索数据 通过 Coum
  • 将外部脚本嵌入 Next.js 应用程序

    我一直在尝试将外部 JavaScript 源嵌入到我的 Next js 应用程序中 但不断收到以下错误 无法对 文档 执行 写入 无法写入 从异步加载的外部脚本写入文档 除非 它是明确打开的 可以找到我尝试使用的代码here https w
  • 如何检测 React 组件与 React 元素?

    React isValidElement对于 React 组件和 React 元素都测试为 true 具体来说 我如何测试一个对象是一个 React 组件 目前 我正在通过测试来做到这一点typeof obj type function 但
  • 单击反应表时选择行

    我正在尝试找到与我的反应应用程序一起使用的最佳表格 目前 反应表 https www npmjs com package react table提供我需要的一切 分页 服务器端控制 过滤 排序 页脚行 话虽这么说 我似乎无法选择一行 没有e
  • React hook useState 未随 onSubmit 更新

    我目前在将输入字段值推至 onSubmit 状态时遇到问题 代码沙箱 https codesandbox io s 8z8xvwk3z2 我正在尝试将输入字段值设置为状态 以便在更新组件后我可以使用该值将用户重定向到另一个页面 我手动测试了

随机推荐

  • 如何在iOS自动布局中为按钮添加等间距和等宽度

    我对 Xcode 中的自动布局约束不熟悉 我有一个像这样的底视图UITabBar with 6 UIButtons 在没有限制的情况下 我将这些按钮与每个按钮的 5 个空格填充对齐 并且每个按钮的宽度为 50 现在 我试图通过使用自动布局来
  • 根据“.”将GL_CODE列拆分为不同的列,而不使用SQL中的函数[重复]

    这个问题在这里已经有答案了 我需要一个查询来根据 将 GL CODE 分成不同的列 作为分隔符 我已附上我已完成的设置的屏幕截图 但在提取第七段后出现错误 请注意 每个元素中的每行的字符串长度并不相同 我使用过的代码 select YEAR
  • 是否有任何工具可以将 SVG 数据转换为 Canvas 友好的输入? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 android 中限制仅沿 y 轴拖放?

    我试图将拖放运动限制为仅在 Y 轴上 以便用户只能查看视图并将其向上或向下拖动 而不能向左或向右拖动 我现在有两个视图 textView 和 dropZone 的 id 其中一个 textView 设置了触摸侦听器 另一个 dropZone
  • 自上而下的递归方案

    我们能否定义一个递归方案 在不失去任何通用性的情况下 自上而下构造值 而不是自下而上 这将非常有帮助 因为我已经看到很多次首先应用使用递归方案内部定义的函数reverse其输入 清楚地表明需要foldl 就像 从前到后 执行 尽管人们普遍认
  • 经典 ASP - 获取完整的 url 名称

    我想知道是否有人可以帮助我 我有以下 URL 这是动态的 www website com images gal boxes pic004 asp 我如何使用经典 ASP 提取 boxes pic004 部分 Thanks
  • 返回应用程序时取消选择表视图行

    我有一个表格视图 其中一个表格视图单元格打开另一个应用程序 当我返回我的应用程序时 表格视图单元格仍然突出显示 返回应用程序时取消选择表格视图单元格的最佳方法是什么 编辑 问题是 viewWillAppear or viewDidAppea
  • 如何为 UITextField 实现类似 NSLineBreakByTruncatingHead 的功能?

    我需要实现类似的目标NSLineBreakByTruncatingHead for UITextField如此处所示 我们假设原文是 这是无法在 UITextField 内显示的长文本 我需要它像 无法显示在 UITextField 内 但
  • 在 Objective C (Cocoa) 线程中运行 C 代码(适用于 iOS)

    首先 我是一名非常新的 Objective C Cocoa iOS 开发人员 但我以前编写过 C C 应用程序 因此 我设法在我的 iPhone 应用程序中运行 Rabbitmq c http hg rabbitmq com rabbitm
  • Java中数组的使用方法

    我是 Java 新手 我正在阅读如何在 java 中使用数组 它说在java中使用数组你必须遵循三个步骤 即声明数组 创建数组和初始化数组 我明白了但是当我没有遵循上面的所有步骤时 下面的代码如何工作 int array 1234 234
  • 正确保存并更新单选按钮响应 java

    我正在尝试将单选按钮用户响应保存在 Firestore 中的 UID 下 我有两个选择yes and no到这个问题 它仅在用户按下按钮选择一个选项时起作用一次 但如果用户想要更改答案 它不会更新 替换旧响应 我想知道是否有人可以提供帮助
  • Python 长文件名支持在 Windows 中被破坏

    我编写Python脚本来复制文件 不幸的是 由于文件名太长 gt 256 它一直失败 有办法解决这个问题吗 我使用的是 Python 2 5 4 和 Windows XP Cheers Use 以字符串开头的路径 http msdn mic
  • IPv4 和 IPv6 禁止

    如果我想在我的网站上通过 IP 禁止用户 是否可以通过两者来实现IPv4 and IPv6 某些浏览器显然默认使用 IPv4 地址 而其他浏览器 如果有可能 则使用 IPv6 地址 因此 如果我通过某人当前的 IP 对其进行禁止 他们只需使
  • 解决MultisampleFramebufferAPPLE生成INVALID_OPERATION

    我不明白为什么glResolveMultisampleFramebufferAPPLE生成错误 1282 0x0502 GL INVALID OPERATION 设置代码 glGenFramebuffers 1 framebuffer gl
  • 为现有基于 MVC 的网站创建 REST API

    我有一个使用 ASP NET MVC3 开发的网站 我现在想公开一个 REST API 供其他人使用 它将公开与网站相同的功能 在网站中 一旦用户登录并根据数据库验证凭据 会话就会管理用户的登录状态 我如何使用 REST API 执行相同的
  • 在 PHP 中使用 getter 和 setter 代替函数或简单的公共字段有什么优点? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不是 PHP 开发人员 所以我想知道 PHP 中以纯 OOP 风格使用私有字段 我喜欢的方式 使用显式 getter setter 的优点和缺
  • 保证金不起作用?两个元素之间需要空间

    首先 我很抱歉我没有把链接放在这里 这是一个工作网站 我不被允许 如果有必要 我会发布我的代码的相关部分 所以问题是非常基本的 我有一个带有一些图像的 div 和一个标题 h3 下面是我的内容开始的地方 无论我如何努力在两者之间创造一些空间
  • 在 if 语句/管理进程中使用 fork

    我有这段代码 printf L1 if fork 0 printf L2 if fork 0 printf L3 fork printf End n 作为练习 我试图找出运行此代码 而不实际运行它 所产生的有效 无效输出的一些示例 我仍然对
  • 在 Java 中将文件的前 N ​​个字节作为输入流读取?

    在我的一生中 我一直无法找到与我想做的事情相匹配的问题 所以我将在这里解释我的用例 如果您知道某个主题已经涵盖了该问题的答案 请随时引导我找到该主题 我有一段代码可以定期 每 20 秒 将文件上传到 Amazon S3 该文件是由另一个进程
  • React Hooks - 即使状态没有改变,useEffect 也会触发

    我在组件内设置了一个效果 如果另一个状态属性发生变化 它会更改视图 但由于某种原因 当组件安装时 效果会运行 即使值detailIndex没有改变 const EventsSearchList gt const view setView u