kar*_*sov 5 javascript reactjs react-admin
我试图显示一个<Loading>
组件,直到数据获取成功,
然后显示一个子组件。我不明白为什么状态不更新......
我该如何处理这个问题?
我正在使用react-admin
,但我想这并不重要。
我有一个<Dashboard>
应该传递defibs (Array)
给<DefibsCard>
.
当我登录时,defibs
我<DefibsCard>
有一个空数组。谢谢 !
const Dashboard = () => {
const dataProvider = useDataProvider();
const [loading, setLoading] = useState(true);
const [defibs, setDefibs] = useState([]);
const fetchDefibs = () => {
dataProvider.getList('defibrillateurs', {
filters: {}, sort: {field: 'id', order: 'ASC'}, pagination: {page: 1, perPage: 10}
}).then((response) => {
setDefibs(response.defibs);
setLoading(false);
})
}
useEffect(() => {
fetchDefibs();
console.log(loading)
}, [])
const classes = useStyles();
return (!defibs
? <Loading />
: <div className={classes.flex}>
<div className={classes.leftCol}>
<div className={classes.flexColumn}>
// ...
<div className={classes.flex}>
<DefibsCard defibs={defibs}/> // Child component
<AlertsCard />
</div>
</div>
</div>
// ...
</div>);
};
Run Code Online (Sandbox Code Playgroud)
我确实有旧反应的经验
所以我可以向你推荐这些chanfes
useEffect(() => {
setLoading(true); // here
fetchDefibs();
console.log(loading)
}, [])
Run Code Online (Sandbox Code Playgroud)
然后
const fetchDefibs = () => {
dataProvider.getList('defibrillateurs', {
filters: {},
sort: {field: 'id', order: 'ASC'},
pagination: { page: 1, perPage: 10 }
}).then((response) => {
setLoading(false); // here
setDefibs(response.defibs)
setLoading(false);
}).catch( e => setLoading(false);)
}
Run Code Online (Sandbox Code Playgroud)
然后
return(
{!loading ? <Loading />
:
<div className={classes.flex}>
<div className={classes.leftCol}>
<div className={classes.flexColumn}>
<Card>
<CardHeader title="Welcome to the administration" />
<CardContent>Lorem ipsum sic dolor amet...</CardContent>
</Card>
......
}
Run Code Online (Sandbox Code Playgroud)
当您使用时{ defibs &&
,它始终为 true,因为您已经初始化了它,只有在为or[]
时才为 false ,并且使用 不是最好的方法,就好像数据库返回长度为 0 的数组一样,那么应用程序将显示正在加载undefined
null
defibs && defibs.length = 0
[]
归档时间: |
|
查看次数: |
10476 次 |
最近记录: |