복잡한 v-if 문을 사용하지 않고 VueJ가 비동기 상태를 가져옵니다.
Vue-Router와 Vuex(Store)를 사용하는 어플리케이션이 있습니다.
대시보드 구성 요소에 사용자 정보가 표시됩니다.Vue는 해당 사용자 정보를 데이터베이스(async)에서 가져와 스토어에 푸시합니다.
서브 컴포넌트에서는 스토어를 통해 이 정보에 액세스합니다.문제는 서브컴포넌트를 처음 로드할 때 스토어의 사용자 엔트리가 비어 있다는 것입니다. TypeError: $setup.user is null
이 문제를 해결하는 한 가지 방법은v-if
모든 요소들 앞에서.하지만, 나는 이것이 깔끔하다고 생각한다.
돌아다니고 싶어도 돼?v-if
html을 사용할 수 있습니까?
User.vue:
<template>
<div>
<div id="profile_content">
<UserNavbar />
<router-view :key="$route.fullPath" />
</div>
</div>
</template>
UserDashboard:
<template>
<div>
<ProfileInformationCard>
<span v-if="user">{{ user.name }}</span>
<span v-if="user">{{ user.lastLogin }}</span>
</ProfileInformationCard>
</div>
</template>
<script>
import _ from "lodash";
import { useStore } from "vuex"
import { watch } from "vue"
export default {
setup(){
const store = useStore()
const user = store.state.user.currentUser
watch(() => _.cloneDeep(store.state.user.currentUser), () => {
user.value = store.state.user.currentUser;
}
);
}
}
</script>
컴포넌트가 표시되도록 하는 것이 좋습니다.loading...
아니면 전체가 아닌 스피너도 있고ProfileInformationCard
다음과 같습니다.
<div>
<ProfileInformationCard v-if="user">
<span>{{ user.name }}</span>
<span>{{ user.lastLogin }}</span>
</ProfileInformationCard>
<Loader v-else />
</div>
언급URL : https://stackoverflow.com/questions/70264931/vuejs-get-asynchronous-state-without-complex-v-if-statements
'source' 카테고리의 다른 글
부울 필드를 인덱싱하면 성능이 향상됩니까? (0) | 2022.11.05 |
---|---|
HTML 양식 숨김 요소를 사용하여 배열 전달 (0) | 2022.11.05 |
MySQL Nested 선택 쿼리? (0) | 2022.11.05 |
PHP에서 컬 타임아웃 설정 (0) | 2022.11.05 |
MAMP에 포함된 MySQL에는 구성 파일이 포함되어 있지 않습니까? (0) | 2022.11.05 |