我期待状态重新加载道具更改,但这不起作用,并且user
变量在下一次useState
调用时没有更新,这是怎么了?
function Avatar(props) {
const [user, setUser] = React.useState({...props.user});
return user.avatar ?
(<img src={user.avatar}/>)
: (<p>Loading...</p>);
}
代码笔
您可以为此创建自己的自定义简单挂钩。钩子在更改默认值时更改了默认值。
https://gist.github.com/mahmut-gundogdu/193ad830be31807ee4e232a05aeec1d8
import {useEffect, useState} from 'react';
export function useStateWithDep(defaultValue: any) {
const [value, setValue] = useState(defaultValue);
useEffect(() => {
setValue(defaultValue);
}, [defaultValue]);
return [value, setValue];
}
#范例
const [user, setUser] = useStateWithDep(props.user);
在函数组件中,我们使用useState
为变量设置初始值,如果我们通过props传递初始值,它将始终设置相同的初始值,直到您不使用use效应
钩子,
例如,您的案例这将完成您的工作
React.useEffect(() => {
setUser(props.user);
}, [props.user])
传递给use效应的函数将在渲染提交到屏幕后运行。
默认情况下,效果在每次完成渲染后运行,但您可以选择仅在某些值发生更改时激发效果。
React.useEffect(FunctionYouWantToRunAfterEveryRender)
如果只将一个参数传递给useEffect,它将在每次渲染后运行此方法。通过将第二个参数传递给useEffect,您可以决定何时启动此函数YouwanttoRunafter EveryRender
React.useEffect(FunctionYouWantToRunAfterEveryRender, [props.user])
当你注意到我正在通过[props.user]现在use效应
将只触发这个FunctionYouWantToRunAfterAnyRender
函数时props.user
被改变
我希望这有助于你的理解让我知道如果有任何改进需要感谢
传递给useState的参数是初始状态,就像在类组件的构造函数中设置状态一样,不用于在重新渲染时更新状态
如果您想更新prop更改的状态,请使用use效应
钩子
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>);
}
工作演示
问题内容: 我希望状态在道具更改时重新加载,但这不起作用,并且变量在下次调用时不会更新,这是怎么回事? 码笔 问题答案: 传递给useState的参数是初始状态,就像在构造函数中为类组件设置状态一样,并且不用于在重新渲染时更新状态 如果您想在道具变更时更新状态,请使用钩子 工作演示
我正在使用Angular UI路由器,希望重新加载当前状态并刷新所有数据/重新运行当前状态及其父级的控制器。 我有3个州级:directory.organisations.details 目录组织包含一个包含组织列表的表。单击表loads目录中的项目。组织。$StateParams传递项目ID的详细信息。因此,在详细信息状态下,我加载此项目的详细信息,编辑它们,然后保存数据。目前一切正常。 现在我
问题内容: 我正在使用Angular UI Router,并希望重新加载当前状态并刷新所有数据/为当前状态及其父级重新运行控制器。 我有3个状态级别: directory.organisations.details directory.organisations 包含一个带有组织列表的表。单击表中的一个项目将加载$ directoryParams传递该项目的ID的 directory.organi
我试图了解如何构建具有不同"页面"或"视图"的ReactJS应用程序。 我将以下组件作为我的基础应用程序,并且我正在React状态中使用currentState属性在视图中的活动组件之间切换。 它执行此任务,但在启动dataLoaded回调时,组件从不接收更新的recipes数组。 如何根据应用程序中的更新状态更新道具? 还是我处理这整件事的方式错了?
问题内容: 我在由运行的docker容器中存在一些问题。 Docker文件 还有我的docker-compose.yml 当我运行它时,一切都很好,但编辑文件不会增加应用程序的重载。文件已更改,我确定是因为我通过ssh连接对其进行了检查,并且容器中的文件已被编辑。再次重新启动容器时,将应用所有更改。我以为当我仅通过docker切换建筑物图像来构成此图像时,它就会消失,但事实并非如此。 当我打电话时