我想问一下我的代码。这是工作。但是,当我在Firebase中进行更新时,它只给setState“ false”,因为它只处理了更改过的数据...而我想问一下,这是一种如何在不首先将它们提供给setState的情况下调用我的数据的方法吗?
我试图调用this.myf(userTeam,userAccepted)这样的函数,然后在单独的函数中调用它,但是它不起作用
_getNotAccepted() {
uzivateleRef.on("value", snapshot => {
let data = snapshot.val();
let seznamNepotvrzenych = Object.keys(data).map((key, i) => {
let getAllUsersUID = data[key].uid;
let dataTeam = snapshot.child("/" + getAllUsersUID + "/teams").val();
let teamInfo = Object.keys(dataTeam).map((key, i) => {
var n = dataTeam[key];
var userTeam = n.teamID;
var userAccepted = n.accepted;
this.setState({ userTeam, userAccepted });
});
console.log(data[key].fname + " je: " + this.state.userAccepted);
if (this.state.userAccepted == false) {
if (this.state.userTeam == this.state.actualUserTeam) {
return (
<View key={key} style={styles.acceptedPpl}>
<View>
<Text style={styles.AcceptedEmail}>{data[key].email}</Text>
{data[key].fname !== "" ? (
<Text style={styles.jmenoPrijmeni}>
{data[key].fname} {data[key].lname}
</Text>
) : (
<Text style={styles.jmenoPrijmeni}>
(Ještě nevyplnil jméno)
</Text>
)}
</View>
<View style={styles.acceptedIcons}>
<Ionicon
name="md-checkmark-circle-outline"
size={30}
color="#89c440"
onPress={() => this.addRoleToUser(data[key].uid, this.state.userTeam)}
/>
<View
style={{
borderLeftWidth: 1,
borderLeftColor: "#DCDCDC",
marginLeft: 15,
marginRight: 15,
height: 20,
marginTop: 5
}}
/>
<Ionicon
name="md-trash"
size={30}
color="#616161"
onPress={() =>
this.showAlert(
data[key].uid,
data[key].email,
this.state.userTeam
)
}
/>
</View>
</View>
);
}
}
});
this.setState({ seznamNepotvrzenych });
});
}
怎么说,它可以工作,但是有点bug,并且在更改数据库后,我必须再次对所有数据(不仅是更改的数据)调用整个函数
我想要这个代码:
let teamInfo = Object.keys(dataTeam).map((key, i) => {
var n = dataTeam[key];
var userTeam = n.teamID;
var userAccepted = n.accepted;
this.setState({ userTeam, userAccepted });
});
console.log(data[key].fname + " je: " + this.state.userAccepted);
if (this.state.userAccepted == false) {
if (this.state.userTeam == this.state.actualUserTeam) { ...
类似这样:
let teamInfo = Object.keys(dataTeam).map((key, i) => {
var n = dataTeam[key];
var userTeam = n.teamID;
var userAccepted = n.accepted;
return(userTeam, userAccepted)
});
console.log(data[key].fname + " je: " + this.state.userAccepted);
if (userAccepted == false) {
if (userTeam == this.state.actualUserTeam) { ...