在我的父组件中:
我有一个布尔状态:
const [isLoading, setIsLoading] = useState<boolean>(true);
我将其发送给子组件:
return (
<OrganisationPersonsLister personsStripped={personsStripped} isLoading={isLoading} />
);
const OrganisationPersonsLister = React.memo((props: { isLoading: boolean }) => {
}
根据布尔值,我希望它呈现不同的组件。
return (
<section className="org-person-lister">
{
(isLoading)
? <Spinner />
: <PopTable title={"title"} columns={columns} data={personsStripped} />
}
</section>
)
我如何更新父组件中的状态:
const viewOrganisation = (orgId: string) => {
const org = orgList.find(o => o.id === orgId);
if (org !== undefined) {
setIsLoading(true)
setChosenOrg(org);
PersonApi.fetchPersonsByOrganisationId(orgId).then(response => {
console.log("fetchPersonByOrganisationId: ", response)
setIsLoading(false)
setPersonsStripped(response)
}).catch(err => {
console.error("Error occurred: ", err);
setIsLoading(false)
setPersonsStripped([])
});
}
};
问题在于,它在初始加载时执行一次,然后在子组件中保持为false,即使状态在父组件中已更新。如何使状态/道具同步?
答案 0 :(得分:0)
尝试添加一个调用setIsLoading的useEffect(将其导入到useState旁边)。下面的伪代码
useEffect(() => {
if(...){
setIsLoading(true)
...
} else {
setIsLoading(false)
}
}, [var1, ...])
作为useEffect的第二个参数,您可以添加要在其上触发效果并因此状态更新的变量