如何检查项目是否已加载?

发布于 2025-02-07 06:55:13 字数 1031 浏览 1 评论 0原文

我有三种不同的项目类型:课程,软件包和程序。我可以全部过滤,也可以通过前面提到的三种类型进行过滤。我如何检查所有项目都被加载的情况,而不仅仅是单独的这三个项目?我想显示一个加载旋转器,以防项目未加载。到目前为止,这就是我所拥有的:

 const [isLoading,   setIsLoading]   = React.useState<boolean>(false);

 React.useEffect(() => {
    setCourses([]);
    setPrograms([]);
    setPackages([]);

    if([DataType.Course, "all"].includes(contentType))
      Course.get(undefined, useCatalog, parent).then(async (c: Course[]) => {
        setCourses(c || []);
        setIsLoading(false)
      })
    if([DataType.Program, "all"].includes(contentType) && (!parent || parent.data_type === DataType.Package))
      Program.get(undefined, useCatalog, parent).then((p: Program[]) => {
        setPrograms(p ||[]),
        setIsLoading(false)
    });
    if([DataType.Package, "all"].includes(contentType) && !parent)
      Package.get(undefined, useCatalog).then((p: Package[]) => {
        setPackages(p || []),
        setIsLoading(false)
      });
  }, [contentType, useCatalog, parent]);

I have three different item types: courses, packages and programs. I can either filter by All, or by the three Types mentioned before. How can I check the case in which ALL items are loaded, not just these three individually? I want to show a loading spinner in case the items are not loaded. Here's what I have so far:

 const [isLoading,   setIsLoading]   = React.useState<boolean>(false);

 React.useEffect(() => {
    setCourses([]);
    setPrograms([]);
    setPackages([]);

    if([DataType.Course, "all"].includes(contentType))
      Course.get(undefined, useCatalog, parent).then(async (c: Course[]) => {
        setCourses(c || []);
        setIsLoading(false)
      })
    if([DataType.Program, "all"].includes(contentType) && (!parent || parent.data_type === DataType.Package))
      Program.get(undefined, useCatalog, parent).then((p: Program[]) => {
        setPrograms(p ||[]),
        setIsLoading(false)
    });
    if([DataType.Package, "all"].includes(contentType) && !parent)
      Package.get(undefined, useCatalog).then((p: Package[]) => {
        setPackages(p || []),
        setIsLoading(false)
      });
  }, [contentType, useCatalog, parent]);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海不蓝 2025-02-14 06:55:13

考虑使用3个不同的isloading状态?例如isloadingCoursesisloadingProgramsisloadingPackages然后做类似的事情

if (!isLoadingCourses || !isLoadingPrograms || !isLoadingPackages) return <Spinner/>

,或者您可以直接检查诸如此类的项目

if (!courses || !programs || !packages) return <Spinner/>

consider use 3 different isLoading state? e.g. isLoadingCourses, isLoadingPrograms, isLoadingPackages then do something like

if (!isLoadingCourses || !isLoadingPrograms || !isLoadingPackages) return <Spinner/>

or you can check directly the items like

if (!courses || !programs || !packages) return <Spinner/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文