需要调用var或不使用setState()

时间:2019-07-03 12:01:16

标签: javascript reactjs react-native react-native-android

我想问一下我的代码。这是工作。但是,当我在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) { ... 

0 个答案:

没有答案