Я использую Firebase для аутентификации и базу данных в приложении Vue. Компонент, над которым я работаю, прослушивает изменения в коллекции «друзей» для конкретного пользователя.
Я бы просто хотел отобразить список друзей, отражая изменения из базы данных в режиме реального времени.
До сих пор я использовал два подхода, и оба приводят к одной и той же проблеме, заключающейся в успешной фиксации изменений, но не в состоянии отобразить изменения внутри домена.
Подход 1
В функции create () я добавляю слушателя, используя функцию .onSnapshot()
. Это успешно фиксирует изменения в базе данных. Однако, если я установлю this.friends
на обновленные значения, экран не изменится.
Подход 2
Использование Vuex для загрузки списка друзей. Я создал функцию наблюдения за магазином, которая успешно отслеживает изменения. Но изменение this.friends
в этой функции часов также не обновляет экран.
Реакционная способность для более простых переменных работает, как и ожидалось.
<template>
<v-container fluid>
{{ friends }}
</v-container>
</template>
<script>
import db from '@/firebase/firestore'
import firebase from 'firebase'
export default {
name: 'Test',
data() {
return {
friends: []
}
},
created() {
let firebaseUser = firebase.auth().currentUser
let ref = db.collection('users')
ref.where('user_id', '==', firebaseUser.uid).limit(1).get()
.then( snapshot => {
if (snapshot.docs[0].data()) {
db.collection("users").doc(snapshot.docs[0].id)
.onSnapshot(function(doc) {
let user = doc.data()
console.log('friends', user.friends) // outputs correctly
this.friends = user.friends // does not update dom
})
}
})
},
}
</script>