首页 > web前端 > js教程 > 正文

在 React Native 和 Firebase 中使用用户角色处理异步状态

霞舞
发布: 2024-10-18 19:24:10
转载
696人浏览过

在 react native 和 firebase 中使用用户角色处理异步状态

在我最近的项目中,我遇到了一个有趣的挑战,我相信很多人都遇到过——根据 react native 应用程序中的用户角色获取数据。

我已将用户角色(常规、管理员)添加到我的应用程序中,作为管理员,我需要获取系统中的所有作业。

执行此操作的逻辑很简单 - 检查登录用户的角色并相应地获取数据。但我没想到的是 react 的异步行为会如何影响我的逻辑。

这是我正在使用的初始代码片段:

  const [loggedinuser, setloggedinuser] = 
usestate<partial<user> | null>(null);

const fetchjobs = async () => {
    try {
      let firebaseservice = await new firebaseservice();
      let jobslist: job[] = [];

      if (loggedinuser?.role == userroles.admin)
         jobslist = await firebaseservice.listalljobs();
      else 
         jobslist = await firebaseservice.listsingleuserjob();

      setjobs(jobslist);
      setfilterjobs(jobslist);
    } catch (error) {
      console.error('error fetching jobs:', error);
    } finally {
      setrefreshing(false);
      setisloading(false);
    }
  };

useeffect(() => {
    const fetchuser = async () => {
      try {
        let user = await returnloggeduser();
        setloggedinuser(user);
      } catch (error) {
        console.error('failed to fetch user', error);
      }
    };

    fetchuser();
  }, []);

  usefocuseffect(
    usecallback(() => {
      if (!hasrun) {
        fetchjobs();
        sethasrun(true);
      }, []
  );
登录后复制

usefocuseffect 在屏幕获得焦点时运行。

理论上来说,这是有道理的。但我不确定的是 loggedinuser 在我尝试获取作业之前始终会被定义。由于 useeffectusefocuseffect 异步运行,因此无法保证 loggedinuser 会在 fetchjobs() 运行

时设置

这就是 react 的异步行为的体现。

我需要确保在继续作业获取逻辑之前已设置 loggedinuser

通过添加对 loggedinuser 的检查,我确保 fetchjobs 仅在用户信息可用时运行:

useFocusEffect(
    useCallback(() => {
      if (loggedInUser && !hasRun) {
        fetchJobs();
        setHasRun(true);
      }, [loggedInUser]
  );
登录后复制

继续建设!

以上就是在 React Native 和 Firebase 中使用用户角色处理异步状态的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号