javascript - Πώς να επιλύσετε μια υπόσχεση Firestore απευθείας σε ένα reactive() proxy του Vue;


Χρησιμοποιώντας Vue 3/Typescript, πώς μπορώ να επιλύσω μια υπόσχεση FireStore που επιστρέφει έναν πίνακα αντικειμένων, σε ένα αντιδραστικό proxy αντικείμενο χρησιμοποιώντας το map();

Σε αυτή την περίπτωση, δεν επιθυμώ να χρησιμοποιήσω forEach() ή Vuex.

setup(){
   ...
   const clients = reactive(
       db
           .collection('users')
           .orderBy('name', 'asc')
           .get()
           .then(snapshot =>
               snapshot.docs.map(doc => ({
                   id: doc.id,
                   name: doc.data().name,
               }))
           )
   )
   ...
}

console.log() :

Promise { <state>: "pending" }
    <state>: "fulfilled"
    <value>: Array [ {…} ]

Απάντηση #1

Αρχικοποιήστε την αντιδραστική ιδιότητα σας με έναν κενό πίνακα και στη συνέχεια τροποποιήστε την μέσα στο hook onMounted:

setup(){
   ...
   const state = reactive({
     clients:[]
   })

onMounted(()=>{
  db.collection('users')
           .orderBy('name', 'asc')
           .get()
           .then(snapshot =>{
             state.clients=  snapshot.docs.map(doc => ({
                   id: doc.id,
                   name: doc.data().name,
               }))
           
            })

})
   ...

}