не может получить доступ к значению, передаваемому из контекста API в функции извлечения данных Firestore - PullRequest
0 голосов
/ 27 апреля 2020

, поэтому я пытаюсь получить некоторые данные из моего firestore через следующий бит кода

import React, { useContext, useState, useEffect } from 'react';
import { CocktailContext } from '../../context/CocktailContext';
import fire, { db } from '../../Config/firebase';
import RecipeCard from '../RecipeCard/RecipeCard';
import NavBar from '../NavBar/NavBar';

export default function SavedItemPage() {
    const [ content, setContent ] = useState(null);
    const { uid } = useContext(CocktailContext);

    useEffect(() => {
        listenForMessages(uid)
    }, []);

    const listenForMessages = (id) => {
        db.collection('users').doc(id).onSnapshot(function(doc) {
            const allMessages = [];
            allMessages.push(doc.data());
            setContent(allMessages);
            console.log(content);
        });
    };

    return (
        <div>
            <NavBar />
        </div>
    );
}

, что в основном должно произойти, это то, что контекстный API, который выглядит как показано ниже, берет uid и передает его в listenForMessages (), который затем выполняет работу по извлечению контента

 {
    "name": "State",
    "value": null,
    "subHooks": []
  },
  {
    "name": "Context",
    "value": {
      "recipes": "[{…}, {…}, {…}, {…}, {…}, {…}]",
      "searchTerm": "ƒ searchTerm() {}",
      "updateUid": "ƒ updateUid() {}",
      "uid": "MfLXrE5czaYK7fYiTFuqFv9SZV02"
    },
    "subHooks": []
  },
  {
    "name": "Effect",
    "value": "ƒ () {}",
    "subHooks": []
  }
]

Проблема в том, что при загрузке страницы я сталкиваюсь с этими ошибками - FirebaseError: Функция CollectionReference.do c () требует его первого аргумент должен иметь тип непустой строки, но это было: ""

, поэтому проблема в том, что listenForMessages () не может получить доступ к значению uid в API контекста.

Может кто-нибудь сказать мне, как решить эту проблему?

1 Ответ

0 голосов
/ 27 апреля 2020

Я не знаю, как работает Firebase, но useContext может быть неправильным? обычно вы используете это так:

[state, dispatch] = useContext(CocktailContext)

Что даст вам все состояние. В предоставленном вами состоянии есть 3 объекта в вашем состоянии, поэтому я предполагаю, что вы получите доступ к uid, выполнив что-то вроде:

    useEffect(() => listenForMessages(state[1].value.uid));

Я вижу, что ']' закрывает ваше предоставленное состояние, но ничего на начало, просто адаптируйтесь на случай, если я пропущу уровень узла.

...