【发布时间】:2021-11-23 17:32:06
【问题描述】:
我正在成功地从我的 Firebase 实时数据库中检索数据,但我无法使用 React 将其存储并呈现到我的网页上。谁能告诉我我的流程目前有什么问题?和/或您能否分享一个类似用例中“正确”存储/渲染过程的示例?
这是我渲染存储数据的方式:
function Dashboard() {
var player_data;
var name_string;
return (
<div className="dashboard">
<h2>{player_data && player_data.settlement.settlement_name}</h2> {/* NOT RENDERING */}
</div>
);
这里是获取 player_data 的函数,它正在成功地将数据写入控制台:
function GetPlayerData(){
Firebase.database().ref().child("players").child(currentUser.uid).get().then((snapshot) => {
if (snapshot.exists()) {
console.log(snapshot.val());
player_data = snapshot.val();
console.log(player_data.settlement.settlement_name)
console.log(player_data.player_data.ancestor_name)
name_string = JSON.stringify(player_data.settlement.settlement_name)
} else {
console.log("No data available");
}
}).catch((error) => {
console.error(error);
});
}
非常感谢!
下一次尝试:我尝试将带有 useState 的 player_data 存储为 const JSON 变量,如下所示,结果收到“TypeError: Cannot read properties of undefined (reading 'settlement_name') "
function Dashboard() {
const [ player_data, setPlayerData ] = useState();
return (
<div className="dashboard">
<h2>{player_data && player_data.settlement.settlement_name}</h2> {/* NOT RENDERING */}
<h2>{player_data && player_data.player_data.ancestor_name}</h2> {/* NOT RENDERING */}
</div>
这是我更新后的 GetPlayerData():
Firebase.database().ref().child("players").child(currentUser.uid).get().then((snapshot) => {
if (snapshot.exists()) {
console.log(snapshot.val());
setPlayerData(snapshot.val());
console.log(player_data.settlement.settlement_name)
console.log(player_data.player_data.ancestor_name)
} else {
console.log("No data available");
}
}).catch((error) => {
console.error(error);
});
}
);
热烈感谢任何建议。谢谢阅读! :)
工作代码!
function Dashboard() {
const [ playerData, setPlayerData ] = useState();
return (
<div className="dashboard">
<h2>{playerData && playerData.settlement.settlement_name}</h2> {/* RENDERING!! */}
<h2>{playerData && playerData.player_data.ancestor_name}</h2> {/* RENDERING! */}
</div>
这是我更新后的 GetPlayerData():
Firebase.database().ref().child("players").child(currentUser.uid).get().then((snapshot) => {
if (snapshot.exists()) {
console.log(snapshot.val());
setPlayerData(snapshot.val());
console.log(playerData) {/* NOT LOGGING : RETURNING UNDEFINED */}
console.log(playerData.settlement.settlement_name) {/* NOT LOGGING : RETURNING TypeError: Cannot read properties of undefined (reading 'settlement') */}
} else {
console.log("No data available");
}
}).catch((error) => {
console.error(error);
});
}
);
【问题讨论】:
标签: javascript reactjs firebase firebase-realtime-database