【发布时间】:2020-05-08 12:14:20
【问题描述】:
我一直遇到一个问题,我正在等待来自道具的数据,以便在我创建的钩子中做某事。它不断抛出诸如“this.value is not defined”之类的错误(因为它还没有从prop加载)
我已使用v-if 修复了其中一些问题,并且仅在需要时使用。但是在某些情况下,我想在我的创建中使用该道具信息,当发生这种情况时,我最终会遇到错误并且不知道如何最好地告诉创建的那部分在运行之前“等待”数据。
有什么建议吗?
--
更新以添加一些示例代码。
在 App.js 页面上,我正在调用“userInfo”并将其设置为这样的数据。我这样做有两个原因。首先检查用户是否登录,其次花时间保存用户信息,因为它将在以后在整个应用程序中使用。 (请注意,user 和 userInfo 不同,包含不同的信息。User 是电子邮件/密码,而 userInfo 是用户名、简历等)
data() {
return {
user: null,
userInfo: null,
}
},
created(){
//let user = firebase.auth().currentUser
firebase.auth().onAuthStateChanged((user) => {
if(user){
this.user = user
let ref = db.collection('users')
.where('user_id', '==', this.user.uid)
ref.get().then(snapshot => {
snapshot.forEach(doc => {
this.userInfo = doc.data()
})
})
} else {
this.user = null
}
})
},
现在,我在使用 v-bind 中传递这些信息。然后在我需要一些信息的地方使用道具调用它。
当我想做一些事情时,问题就来了 -
if(this.userInfo) {
value = true
}
调用this.userInfo会抛出错误“this.userInfo is null”(我在页面的data()中默认设置为null)。
【问题讨论】:
-
您是否尝试过使用
mounted中的变量而不是created? -
您可能会分享您的代码示例。但是,您正在描述一种状态,其中传入的道具甚至还不存在,就像一个承诺响应。可能是这个原因吗?
-
@Aer0 可能,尽管我将道具从 App.vue 传递到页面。它确实加载并在方法中可用,但在文档加载时还没有准备好(或者即使在安装时,似乎也是如此)
-
@Jesper 我刚刚尝试了一下,但它似乎仍然为时过早?
-
@KJParker我假设您与我们共享一些代码。可能更容易追查问题。但是,我仍然认为这是一个承诺/异步问题。承诺在方法中使用时得到解决,但不是在开始时(创建的钩子)。