我尝试在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变量
1条答案
按热度按时间eanckbw91#
最后它工作了。我只是在父组件中设置我的存储值,并将其导入不同的子组件,然后在第一次渲染中正确地返回值。