"Objects are not valid as a React child" 将用户数据添加到 Firestore 时

"Objects are not valid as a React child" when adding user data to Firestore

我想知道如何在 Firestore 注册期间保存用户数据。

import {
  createUserWithEmailAndPassword,
  onAuthStateChanged,
  signInWithEmailAndPassword,
  signOut,
} from "firebase/auth";
import { collection, setDoc, doc } from "firebase/firestore";
import React, { useContext, useEffect, useState } from "react";
import { auth, db } from "../firebaseConfig";

const AuthContext = React.createContext();

export const useAuth = () => {
  return useContext(AuthContext);
};

export const AuthProvider = ({ children }) => {
  const [currentUser, setCurrentUser] = useState();
  const [loading, setLoading] = useState(true);

  const signup = async (email, password) => {
    return createUserWithEmailAndPassword(auth, email, password).then(
      (cred) => {
        setDoc(doc(collection(db, "users", cred.user.uid)), {
          name: "manan",
          city: "chd",
        });
      }
    );
  };

  const login = (email, password) => {
    return signInWithEmailAndPassword(auth, email, password);
  };

  const logout = () => {
    return signOut(auth);
  };

  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (user) => {
      setCurrentUser(user);
      setLoading(false);
    });

    return unsubscribe;
  }, []);

  const value = {
    currentUser,
    login,
    signup,
    logout,
  };
  return (
    <AuthContext.Provider value={value}>
      {!loading && children}
    </AuthContext.Provider>
  );
};



如您所见,我为所有函数创建了一个 AuthContext.js。现在,在 signup() 时,我无法存储与其 UID 相对应的用户数据...正如我使用的那样

setDoc(doc(collection(db, "users", cred.user.uid)), {
          name: "manan",
          city: "chd",
});

但它根本不工作,它抛出一个错误
错误:

Objects are not valid as a React child (found: object with keys {error}). If you meant to render a collection of children, use an array instead.

您正在使用文档和集合作为参考。您应该只在 setDoc

上使用文档参考

来自:

setDoc(doc(collection(db, "users", cred.user.uid)), {
          name: "manan",
          city: "chd",
});

更改为:

setDoc(doc(db, "users", cred.user.uid), {
          name: "manan",
          city: "chd",
});