Как я могу это исправить? Я думаю, что я должен использовать await, но я не могу заставить его работать должным образом.
Это зависит от того, что this.$auth.check()
возврат. Если он возвращает обещание, ответ - да, вы должны использовать await
.
Но, к сожалению, функция render
должна быть синхронной. Что вы можете сделать, это использовать еще один компонент-оболочку .
new Vue({
render(createElement) {
return createElement({
data: () => ({
component: null
}),
async created() {
this.component = await checkAuth() ? App : Login
},
render(createElement) {
return createElement(this.component)
}
})
}
}).$mount('#app')
Демо
Примечание:
-
Я бы предпочел создать компонент-оболочку в качестве однофайлового компонента.
Похоже, вы используете vue-router
, возможно, вы захотите использовать Navigation Guards вместо этого.
Обновление
Как вы уже могли заметить, вам вообще не нужен компонент-обертка.
new Vue({
data: () => ({
component: null
}),
async created() {
this.component = await checkAuth() ? App : Login
},
render(createElement) {
return createElement(this.component)
}
}).$mount('#app')