当前位置: 首页 > 知识库问答 >
问题:

反应钩使用效果

南门刚捷
2023-03-14

有没有办法添加依赖项,并在它们更改时防止它重新加载状态?

错误:第48行: 6: React Hook use效应缺少依赖项:profile.bio,profile.company,profile.githubusername,profile.location,profile.skills,profile.social,profile.status和profile.website。要么包含它们,要么删除依赖数组。如果setFormData需要profile.company的当前值,您也可以切换到useReduer而不是useState,并在减速机report-追踪器/穷举器deps中读取profile.company

代码:

useEffect(() => {
    getCurrentProfile();

    setFormData({
      company: loading || !profile.company ? "" : profile.company,
      website: loading || !profile.website ? "" : profile.website,
      location: loading || !profile.location ? "" : profile.location,
      status: loading || !profile.status ? "" : profile.status,
      skills: loading || !profile.skills ? "" : profile.skills.join(","),
      githubusername:
        loading || !profile.githubusername ? "" : profile.githubusername,
      bio: loading || !profile.bio ? "" : profile.bio,
      twitter: loading || !profile.social ? "" : profile.social.twitter,
      facebook: loading || !profile.social ? "" : profile.social.facebook,
      linkedin: loading || !profile.social ? "" : profile.social.linkedin,
      youtube: loading || !profile.social ? "" : profile.social.youtube,
      instagram: loading || !profile.social ? "" : profile.social.instagram,
    });
  }, [loading, getCurrentProfile]);

出于某种原因,如果我不添加:[加载,getMONtProfile,profile.bio,profile.company,profile.githubusername,profile.location,profile.skills,

但是,正如您可能已经猜到的那样,当您添加一个链接到已更改内容的依赖项时,use效应的表现并不好。不允许编辑字段。

TL; DR当我添加询问的依赖项时,它会不断重新更新字段的状态,而不让用户编辑它们。

共有1个答案

尉迟景福
2023-03-14

再见,你可以这样使用useRefhook:

import React, { useEffect, useRef } from 'react';
...
const justOneTime = useRef(true)

useEffect(() => {
   if (justOneTime.current) {
       // your logic
       justOneTime.current = false
   }
}, [/*all the dependencies that useEffect needs*/])

通过这种方式,即使其中一个依赖项更改了它的值,也将只执行一次use效应代码(在if语句中)。

 类似资料:
  • 我通常使用getBoundingClientRect()。宽度当开发一个Swiper组件使用反应挂钩,但在一些例子getBoundingClientRect()。宽度返回0。 我在useEffect函数中使用了setTimeout,效果很好; 下面是简单的swiper代码演示: 简单swiper演示代码

  • 当我的组件最初挂载时,我使用useEffect钩子异步获取数据。我还想使用一个效果(或另一个更适合这种情况的钩子)来转换这些数据,同样是在我的组件最初挂载时。 引用上下文并初始化增强节本地状态 在挂载上获取数据(此工作原理) 转换获取的数据和 这里的问题是此时仍然为空 当我把上面的内容从use效应中拉出来,放在一个基本的if语句中时,它就起作用了(无限循环仍然是一个问题)... 我知道我应该根据R

  • 这里我使用的是react hooks状态 在这里,我试图改变来自API的默认值。但是,我不能在改变方法上改变。 谢谢

  • 我试图创建一个从服务器获取数据的函数,它工作了。但我不确定这是不是正确的方法? 我不确定是调用fetchData函数的地方。我在里面做那个有用吗?对地方?而且,这个电话只会发生一次?因为我用[]? 一般来说,你会怎么做这样的事情?

  • 问题内容: 在带有钩子的React中,更新状态的正确方法是嵌套对象是什么? 一个人怎么会使用到的更新来(附加一个字段)? (改变价值)? 问题答案: 您可以像这样传递新值

  • 问题内容: 让我解释一下此代码的结果,以便轻松询问我的问题。 当坐骑,“效果”将被记录。这与有关。 每当我更改名称输入时,都会记录“效果”和“清理”。反之亦然,自从我添加到的第二个参数以来,每次更改用户名输入都不会记录任何消息。这与 最后,在卸载时,将记录“清理”。这与有关。 我们都知道。 总之,只要重新渲染组件(包括卸载),就会调用“清理” 如果要使该组件仅在卸载时记录“清理”,则只需将第二个参

  • 我正在尝试新的hooks功能,并坚持认为我的状态没有更新。 实际上,状态已更新(我可以在console.log中看到更新的值,并且我的组件会重新运行useEffect),但是useEffect方法使用我的旧状态,并仅将签名保存给第一个用户,而活动用户在状态中确实发生了更改。 我想过添加useCallback,并将我的方法移动到use效果或组件本身,但我可以设法让它工作。 状态: 这是我的效果: 这