Галерея с firestore и useContext

# #javascript #reactjs #firebase #google-cloud-firestore #use-context

Вопрос:

Я следовал учебнику, в котором описывается, как создать галерею с помощью Firebase и React.js, шаг за шагом. Мне удалось разместить изображения в массиве storage и console.log() моей коллекции из firestore. Но, к сожалению, я не смог отобразить изображения на странице галереи.

 // .... The tutorial's way....
function useFirestore (collection) {
    const [docs, setDocs] = useState([]);

    useEffect(() => {
      const unsub = projectFirestore.collection(collection)
        .orderBy('createdAt', 'desc')
        .onSnapshot(snap => {
          let documents = [];

          snap.forEach(doc => {
            documents.push({...doc.data(), id: doc.id});
          });

          setDocs(documents);
        });

      return () => unsub();
    }, [collection]);  
    return { docs };
  } 
  export default useFirestore;
 

Кроме того, я создал систему аутентификации с Firebase и использую useContext(). Я думаю, что тот факт, что я использовал контекст, является основным отличием между кодом tuto и моим, а также тем фактом, что блокировка галереи для отображения изображений.

 // ...index.js
ReactDOM.render(
  <AuthProvider>
    <App />
  </AuthProvider>,
  document.getElementById('root')
  );
  
 

Я попытался изменить свой код, чтобы он соответствовал контексту, но он отправляет мне сообщение «Не удается уничтожить свойство {docs} …».

 //...Test with context.... not sure if it's good
 
const galleryContext = React.createContext()

export function useFireStore() {
    useContext(galleryContext)
}

export function GalleryProvider({collection}){

    const [docs, setDocs] = useState([]);

     useEffect(() => {
       const unsub = projectFirestore.collection(collection)
             .orderBy('createdAt', 'desc')
             .onSnapshot(snap => {
                 let documents = [];

                 snap.forEach(doc => {
                     documents.push({...doc.data(), id: doc.id});
                 });
                 setDocs(documents);
             });
             return () => unsub();
     }, [collection]);

     return (
        <galleryContext.Povider value={docs}>
            {collection}
        </galleryContext.Povider>
    )
}
 

my gallery component

 function Gallery() {

    const { docs } = useFireStore('images');

    return (
        <div>
            <div className="img_grid">
                { docs amp;amp; docs.map(doc =>{
                    <div className="imgWrap" key={doc.id}>
                        <img src={doc.url} alt="gallery" />
                    </div>
                })}
            </div>
        </div>
    )
}

export default Gallery
 

Я потерялся, я даже не знаю, что делать. Я буду очень признателен, если вы захотите мне помочь.
Спасибо.