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

React.useState不会从props重新加载状态

陈和裕
2023-03-14
问题内容

我希望状态在道具更改时重新加载,但这不起作用,并且user变量在下次useState调用时不会更新,这是怎么回事?

function Avatar(props) {
  const [user, setUser] = React.useState({...props.user});
  return user.avatar ? 
         (<img src={user.avatar}/>)
        : (<p>Loading...</p>);
}

码笔


问题答案:

传递给useState的参数是初始状态,就像在构造函数中为类组件设置状态一样,并且不用于在重新渲染时更新状态

如果您想在道具变更时更新状态,请使用useEffect钩子

function Avatar(props) {
  const [user, setUser] = React.useState({...props.user});

  React.useEffect(() => {
      setUser(props.user);
  }, [props.user])

  return user.avatar ? 
         (<img src={user.avatar}/>)
        : (<p>Loading...</p>);
}

工作演示



 类似资料:
  • 我期待状态重新加载道具更改,但这不起作用,并且变量在下一次调用时没有更新,这是怎么了? 代码笔

  • 我正在使用Angular UI路由器,希望重新加载当前状态并刷新所有数据/重新运行当前状态及其父级的控制器。 我有3个州级:directory.organisations.details 目录组织包含一个包含组织列表的表。单击表loads目录中的项目。组织。$StateParams传递项目ID的详细信息。因此,在详细信息状态下,我加载此项目的详细信息,编辑它们,然后保存数据。目前一切正常。 现在我

  • 问题内容: 我正在使用Angular UI Router,并希望重新加载当前状态并刷新所有数据/为当前状态及其父级重新运行控制器。 我有3个状态级别: directory.organisations.details directory.organisations 包含一个带有组织列表的表。单击表中的一个项目将加载$ directoryParams传递该项目的ID的 directory.organi

  • 问题内容: 我在由运行的docker容器中存在一些问题。 Docker文件 还有我的docker-compose.yml 当我运行它时,一切都很好,但编辑文件不会增加应用程序的重载。文件已更改,我确定是因为我通过ssh连接对其进行了检查,并且容器中的文件已被编辑。再次重新启动容器时,将应用所有更改。我以为当我仅通过docker切换建筑物图像来构成此图像时,它就会消失,但事实并非如此。 当我打电话时

  • 问题内容: 我有一个带有php include的Div Tag,该div用来填充该信息,我想要做的是使它每隔15秒调用一次,以便它可以在那里更新信息,而不必重新加载整个网页。我试图用JavaScript / jQuery做到这一点,但似乎无法正常工作 这是我在搜索一些内容后所拥有的,然后发生的是,它加载了Small.php,但不会每15秒刷新一次或更新信息。 请帮忙! 我应该添加所有应显示的php

  • 本文向大家介绍angular-ui-router 重新加载当前状态,包括了angular-ui-router 重新加载当前状态的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用$state.reload控制器中的方法重新加载当前状态 这是的简写(摘自官方文档的代码) 在您的状态上运行重载也会重新启动控制器并重新解析所有已解析的值。