如何修复未捕获的类型错误:无法读取未定义的属性(读取“map”)在 react、firebase 中
2023-05-01
1586
我正在尝试从 firebase 数据库检索数据,但收到标题中提到的错误。
我正在尝试从
AddMember.js
组件(有效)向 firebase 添加新成员。
现在,我试图在仪表板加载到
MembersTable.js
组件时检索数据。
我理解您无法映射到对象,但我这里是否遗漏了什么,我该如何解决这个问题?
下面是我的代码和我正在尝试读取的数据的屏幕截图。
MembersTable.js
const [loading, setLoading] = useState(true);
const [userMembers, setUserMembers] = useState([]);
useEffect(() => {
onAuthStateChanged(auth, (user) => {
console.log(`Welcome to your dashboard.. ${user.uid}`);
// get the data from firebase
const getData = () => {
const dbRef = ref(database, `users/${user.uid}/`);
onValue(dbRef, (snapshot) => {
const data = snapshot.val();
var userMembers = data.members;
console.log(userMembers);
setUserMembers({ userMembers });
setLoading(false);
});
};
getData();
});
}, []);
AddMember.js
const writeMemberToDatabase = (member) => {
const currentUser = auth.currentUser.uid;
const uniqueKey = uuidv4();
const newkey = "hey";
set(child(dbRef, `users/${currentUser}/members/${newkey}`), member)
.then(() => {
console.log(`updated ${currentUser}...`);
setToggle(false);
setMemberDetails([]);
})
.catch((error) => {
console.log("Error adding member to database: ", error);
});
};
const submitForm = (e) => {
e.preventDefault();
console.log("submitted user...");
const member = [
{
membername: memberName,
memberemail: memberEmail,
membershipprice: membershipPrice,
},
];
writeMemberToDatabase(member);
setMemberDetails([...memberDetails, member]);
console.log(auth.currentUser);
};
请查看我的数据库的附加图片
2个回答
我没有看到您提供的代码中使用
map
。该错误通常意味着您认为是数组的变量实际上未定义。处理异步代码时可能会发生这种情况,其中值在承诺解析之前未定义。处理潜在未定义值的映射的一种潜在方法可能是这样的......
const myVar = undefined
const myMap = (myVar || []).map(item => item)
这将映射到 myVar 上,或者如果 myVar 未定义,它将映射到空数组上。
Scott Z
2023-05-01
我认为问题出在 setState 中,值应该是一个数组,但你将其设置为对象 setUserMembers({ userMembers });
所以试试这个
setUserMembers(userMembers);
如果 userMembers 是数组,它就可以工作
最后尝试不要使用 var 来声明变量,如果值可以改变,则使用 let,对于函数和值永远不会改变,则使用 const
Ubaldo Suarez
2023-05-01