"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",
});
我想知道如何在 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",
});