当前位置: 首页 > 面试题库 >

我可以在useEffect挂钩中设置状态

弘阳德
2023-03-14
问题内容

可以说我有一些状态依赖于其他状态(例如,当A更改时,我希望B更改)。

创建一个观察A并将B设置在useEffect钩内的钩子是否合适?

效果是否会级联,从而在我单击按钮时会触发下一个效果,从而导致b发生变化,从而导致第二个效果在下一次渲染之前触发?这样构造代码是否有性能下降?

let MyComponent = props => {
  let [a, setA] = useState(1)
  let [b, setB] = useState(2)
  useEffect(
    () => {
      if (/*some stuff is true*/) {
        setB(3)
      }
    },
    [a],
  )
  useEffect(
    () => {
      // do some stuff
    },
    [b],
  )

  return (
    <button
      onClick={() => {
        setA(5)
      }}
    >
      click me
    </button>
  )
}

问题答案:

效果始终在渲染阶段完成后执行,即使您将setState放在一个效果中,另一个效果也将读取更新后的状态并仅在渲染阶段之后对其执行操作。

话虽如此,最好以相同的效果采取两种行动,除非有可能b由于其他原因而改变的可能性,而不是changing a在这种情况下,您也希望执行相同的逻辑



 类似资料:
  • 假设我有一个依赖于其他状态的状态(例如,当A改变时,我希望B改变)。 在useEffect钩子中创建一个观察a并设置B的钩子是否合适? 效果是否会层叠,当我单击按钮时,第一个效果会激发,导致b发生变化,导致第二个效果激发,然后再进行下一次渲染?这样构造代码有没有性能方面的缺点?

  • 我有一个React函数组件,沿着遗留的JQuery应用程序运行。在JQuery元素上调用事件处理程序时,传递当前React状态默认值为初始状态值,而不是更新后的状态值。 已验证的x状态正在通过useEffect钩子更改,但在调用事件侦听器时,x设置为初始状态值,而不是更新后的状态值。 不会显示任何错误消息。在本文的上述代码中,我希望onXSave方法调用中的x状态为true,但它一直显示为fals

  • 所以,我要做的是在一个按钮上添加一个事件监听器,当按下该按钮时,它将接受一个状态的值,并将其记录在控制台中。但即使在多次调用setState之后,记录的值也不会更新。 然后是触发它的按钮 当我单击滑块时,该值会发生变化,但当我按下带有id=“process”的按钮并与之相关联的事件侦听器时,即使在更新状态后,它也只打印20。

  • 我有一个小的井字游戏,一切都很好,除了我正在努力寻找在代码中放置完成功能的位置。让我给你看; 这基本上是整个游戏,我在另一个文件中有一个整理函数,就像这样; 完成功能也可以正常工作,但是由于useState是异步工作的,我知道这一点,我正在努力把它放在哪里。如果我把点击功能放在里面,它就不能对新的状态做出反应,只能对之前的状态做出反应。如果我把外面加上只是if语句,它会说渲染太多,因为我正在设置获

  • 我正在从事Instagram克隆项目。我正在做个人资料页面部分,遇到了一些问题。我正在尝试使用hooks(useState)设置服务器对用户文档的响应。我的问题是,当我使用useEffect时(仅使用[]一次),用户名状态没有设置。我让useEffect无限运行,我发现状态是在一段时间后设置的。 检查setProfileUser(…)是否正确,这是因为它设置了数据,但经过一段时间后,即使我可以在正

  • 我试图创建一个简单的组件,从Apollo GraphQL服务器(查询)返回我的所有组织。我想从一个上下文状态呈现所有这些组织,在这个上下文状态下,在组件挂载(由useEffect挂钩处理)之后,可以使用分派方法放置这些组织。 如果状态结果(organizations数组)为空,useEffect钩子应该调用函数getOrganizations,然后调用自定义钩子useGetOrganization