0
votes

La promesse non confondue rejet TypeError B.Setate n'est pas une fonction

J'essaie d'installer une variable à l'intérieur d'une classe, mais il jette une erreur disant:

"Rejection non confondu Rejeter TypeError B.Setate n'est pas une fonction" xxx


0 commentaires

3 Réponses :


0
votes

Vous devrez peut-être lier "ceci". Ce que «ceci» fait référence à la question.

static message  =()=>{
  let self = this
  // Stuff
  self.setState()


0 commentaires

0
votes
import React, { Component } from "react";
import AsyncStorage from '@react-native-community/async-storage';

export default class ACHServicesMenu extends Component {
    constructor(props) {
        super(props);
        //This binding of static method should also give you error
        this.message = this.message.bind(this)
        this.state = {
            value: '',
        };
    }

    //Static methods don't have access to this so it won't work
    static message = async () => {
        await AsyncStorage.getItem('FromValue').then((FromValue) => {
            this.setState({ value: FromValue }, () => {
                console.log(this.state.value);
                //Here in callback you can get updated state value
            });
        });
    }
}
Use async and await for Promise based request. 
Also, if you have static method, you can not access this context and binding of static method should also give you error. You can make that method normal and bind it. 

3 commentaires

Merci d'avoir expliqué. KRINA !! Mais que devrais-je utiliser d'autre à la place de statique? Parce que sans statique, j'ai eu une erreur disant "_main.default.message n'est pas une fonction"


Il suffit de faire une méthode normale et de l'appeler à l'aide de cela.NameOfmethod ou si vous voulez que ce soit statique, appelez-le à l'aide de class Nom.Methodname


J'essaie d'appeler la fonction de message d'une autre classe. Il ne fonctionne que avec statique avez-vous une alternative à appeler cette fonction sans statique



0
votes

Supprimer STATIQUE STRT> Mot clé parce que vous ne pouvez pas appeler la méthode du message par ceci car elle est exposée sous forme de fonction de méthode statique que vous pouvez simplement l'appeler à l'aide du nom de référence de classe d'origine comme ceci:

P>

import React, { Component } from "react";
import AsyncStorage from "@react-native-community/async-storage";

export default class B extends Component {
  state = {
    value: ""
  };
  constructor(props) {
    super(props);
    
    this.message = this.message.bind(this);
  }
  
  message() {
    AsyncStorage.getItem("FromValue").then(FromValue => {
      this.setState({ value: FromValue }, () => {
        console.log(this.state.value);
      });
    });
  };
}


5 commentaires

Mais que devrais-je utiliser d'autre à la place de statique? Parce que sans statique, j'ai eu une erreur disant "_main.default.message n'est pas une fonction"


Merci pour vos efforts, mon frère mais j'ai eu la même erreur "message n'est pas une fonction" lorsque j'ai essayé de l'appeler à partir d'une autre classe comme ONPRESS = () => {b.message ()}


Vous n'avez pas accès au message publiquement. Vous pouvez simplement utiliser la fonction de message localement dans le composant B.


Comment puis-je le faire globalement?


Passez les données par accessoire si vous voulez le faire globalement.