Нужно вызвать var или let без setState () - PullRequest
0 голосов
/ 03 июля 2019

Я хочу спросить о моем коде.Это работает.Но когда я делаю обновление в 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 });
    });
  }

Как я говорю, код работает, но немного глючит и после изменениябаза данных Я должен снова вызвать целую функцию для всех данных, а не только измененных данных

Я хочу иметь этот код:

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) { ... 
...