-LUeq8x-5QaVSXKJdXtz是关键
signup = async () => {
const { email, pass, job, description, name, age } = this.state;
// fetching state variables to use in this function
try {
await firebase.auth().createUserWithEmailAndPassword(email, pass);
var playersRef = firebase.database().ref("doctorsList/");
//push function adds the data with a unique key
playersRef.push({
doctor: {
name: name,
age: age,
job: job,
description: description
},
});
}
catch (error) { console.log(error) }
}
如果它们具有唯一密钥,如何从Firebase数据库中获取数据?
var ref = firebase.database().ref( 'doctorsList/doctor/' );
ref.on('value', (snapshot) => {
alert(snapshot.val().name);
});
当我使用alert(snapshot.val().name);
时,它会显示数据库中的名称,但是当我尝试通过this.setState({ name: snapshot.val().name });
保存数据时,它不会保存。或者如何一次从数据库保存数据?
答案 0 :(得分:2)
托尼(Tony)的答案显示了一旦您知道他们的钥匙怎么去找医生。在各种情况下,您可能都不知道密钥。
例如,如果您对想要读书的医生一无所知,那么您只能阅读所有医生的信息:
var ref = firebase.database().ref( 'doctorsList' );
ref.on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
alert(doctorSnapshot.key+": "+doctorSnapshot.val().doctor.name);
});
});
例如,如果您知道医生的姓名,则可以使用查询来检索与该姓名匹配的医生:
ref.orderByChild("doctor/name").equalTo("shubham").on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
alert(doctorSnapshot.key);
});
});
在这里您仍然需要snapshot.forEach
,因为可能有多名名字匹配的医生。
如果您想对每位医生进行一些更改,可以在回调中使用以下命令进行更新:
ref.orderByChild("doctor/name").equalTo("shubham").on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
doctorSnapshot.ref.child("job").set("doctor");
});
});
答案 1 :(得分:1)
如果要使用特定的密钥上传,请将引用更改为此:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textAllCaps">false</item>
</style>
然后,如果要使用特定密钥获取数据,请更改为:
const key = //your key here;
var playersRef = firebase.database().ref(`doctorsList/${key}`);