javascript 仅当存储中不存在svelte时才从API获取值

relj7zay  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(140)

我尝试在svelte和urql中创建一个函数,只有当用户在商店中已经设置好时,才能让用户登录。否则,我从API中获取它。
在我的登录提交表单中,我在商店中设置了用户值:

function onSubmit() {
    if ($data?.user) {
      userLogged.update((s) => ({
        ...s,
        user: $data?.user,
      }));
    }
  });

字符串
在另一个组件中,我尝试从store if exist或API中获取值:

<script lang="ts">
let user: any;
    const getUser = () => {
        let user = get(userLogged);
    
        if (user.user !== null) {
          return user;
        } else {
          const userQuery = queryStore({
            client: getContextClient(),
            query: USER_QUERY,
          });
          userQuery.subscribe((val) => {
            console.log("val ?", val?.data?.user);
            userLogged.update((s) => ({ ...s, user: val?.data?.user }));
    
            user = val?.data?.user;
           
          });
          return user;
        }
      };
    user = getUser();
    console.log("user", user);
</script>


但是当我第一次刷新页面时,console.log返回undefined,然后当组件更新时,它正确地返回user。我不明白为什么,因为console.log进入订阅每次都返回好的值,我将其分配给user变量

eanckbw9

eanckbw91#

最后它工作了。我只是在父组件中设置我的存储值,并将其导入不同的子组件,然后在第一次渲染中正确地返回值。

相关问题