1 Question: Passer de fetch à fs.readFile ou require

question créée à Tue, Apr 9, 2019 12:00 AM

Je ne peux pas utiliser fetch dans notre application de réaction car il est emballé dans electron. J'essaie de trouver un moyen de modifier ce que nous avons à utiliser 0600350991111101035062 ou 0600350991111101035062. D'après ce que j'ai lu, il vaudrait mieux utiliser require car il serait déjà analysé en JSON?

Ceci est mon code actuel:

fs.readFile

Code mis à jour basé sur la réponse @Marcin:

require

Erreur que je reçois:

  

react.development.js: 188 Avertissement: Impossible d'appeler setState sur un composant   ce n'est pas encore monté. Ceci est un non-op, mais cela pourrait indiquer un bogue   dans votre application. Attribuez plutôt à

fetch('./build/config.json')
        .then((r) => r.json())
        .then((json) =>{
          //console.log(json);
          //json defines the module NavLink s and their content - so save it to App state
          for (var n=0 ; n<json.nlinks.length ; n++)
          {
            json.nlinks[n].state = (n===0?1:0); // create state field dynamically
            json.nlinks[n].currentChapter = 0; // create field dynamically
            if (json.nlinks[n].chapters)
            {
              if (!json.nlinks[n].test) json.nlinks[n].test={state:0,submitted:0,title:"dummy",questions:[]}; // create dummy test dynamically
              for (var q=0 ; q<json.nlinks[n].test.questions.length ; q++)
              {
                json.nlinks[n].test.questions[q].response=0;
                json.nlinks[n].test.questions[q].correct=false;
              }
              for (var c=0 ; c<json.nlinks[n].chapters.length ; c++)
              {
                json.nlinks[n].chapters[c].state = (c===0?1:0); // create state field dynamically
                if (json.nlinks[n].chapters[c].sections)
                {
                  json.nlinks[n].chapters[c].currentSection=0; 
                  for (var s=0 ; s<json.nlinks[n].chapters[c].sections.length ; s++)
                  {
                    json.nlinks[n].chapters[c].sections[s].state = (s===0?1:0); // create state field dynamically
                  }
                }
                else
                {
                  json.nlinks[n].chapters[c].sections=[];
                }
              }
            }
            else
            {
              json.nlinks[n].chapters=[];
            }
          }
          this.setState({config: json,});

          });
directement ou   définir une propriété de classe 0600350991111101035062 avec l’état souhaité dans le champ   Composant d'application.
    
0
1 Réponses                              1                         

Je vous recommande d'utiliser

constructor(props) {
    super(props);
    this.state={
      config:{
        nlinks:[],
        },
        numPages: null,
        pageNumber: 1,
      popup: null,
      pdf:null,
      homelhs:"",
      homerhs:"",
      currentNlink:0,
      currentClink:0
      };



      const json = require('../public/config.json');
      console.log(json);
      //json defines the module NavLink s and their content - so save it to App state
      for (var n=0 ; n<json.nlinks.length ; n++)
      {
        json.nlinks[n].state = (n===0?1:0); // create state field dynamically
        json.nlinks[n].currentChapter = 0; // create field dynamically
        if (json.nlinks[n].chapters)
        {
          if (!json.nlinks[n].test) json.nlinks[n].test={state:0,submitted:0,title:"dummy",questions:[]}; // create dummy test dynamically
          for (var q=0 ; q<json.nlinks[n].test.questions.length ; q++)
          {
            json.nlinks[n].test.questions[q].response=0;
            json.nlinks[n].test.questions[q].correct=false;
          }
          for(var c=0 ; c<json.nlinks[n].chapters.length ; c++)
          {
            json.nlinks[n].chapters[c].state = (c===0?1:0); // create state field dynamically
            if (json.nlinks[n].chapters[c].sections)
            {
              json.nlinks[n].chapters[c].currentSection=0; 
              for (var s=0 ; s<json.nlinks[n].chapters[c].sections.length ; s++)
              {
                json.nlinks[n].chapters[c].sections[s].state = (s===0?1:0); // create state field dynamically
              }
            }
            else
            {
              json.nlinks[n].chapters[c].sections=[];
            }
          }
        }
        else
        {
          json.nlinks[n].chapters=[];
        }
      }
      this.setState({config: json,});

      this.handleSubmit=this.handleSubmit.bind(this);
//      this.handleChange=this.handleChange.bind(this);

}
. Votre code serait modifié comme suit: this.state

Cependant, si vous souhaitez rester avec fetch (meilleure solution car elle est basée sur des promesses), vous pouvez importer un polyfill, car nodejs ne le prend pas en charge: chercher polyfill . Tous vos résultats ne doivent pas être touchés car ils suivent la même structure que 0600350991111101035062.

    
0
2019-04-09 12: 05: 16Z
  1. Merci pour votre réponse. Comme je n’ai qu’une seule extraction, je pense que l’utilisation de la méthode state = {}; convient. Je vais le mettre et le tester:)
    2019-04-09 12: 39: 56Z
  2. Géré pour charger config.json mais je reçois cette erreur maintenant en utilisant require: react.development.js: 188 Avertissement: Impossible d'appeler setState sur un composant qui n'est pas encore monté. Ceci est un non-op, mais cela pourrait indiquer un bogue dans votre application. Attribuez plutôt directement à 0600350991111101035062 ou définissez une propriété de classe 0600350991111101035062 avec l'état souhaité dans le composant d'application.
    2019-04-09 13: 10: 26Z
  3. J'ai essayé d'utiliser Polyfill mais je reçois la même erreur de schéma de fichier une fois qu'il est emballé
    2019-04-09 13: 54: 50Z
  4. Comme le message d'erreur indique, vous ne pouvez pas utiliser require avant que le composant ne soit monté. Vous l'appelez dans le constructeur (qui est exécuté avant que le composant ne soit monté). Si vous souhaitez exécuter le code après le montage, insérez-le dans la méthode
    const json = require('./build/config.json');
    //console.log(json);
    //json defines the module NavLink s and their content - so save it to App state
    for (var n=0 ; n<json.nlinks.length ; n++)
    {
      json.nlinks[n].state = (n===0?1:0); // create state field dynamically
      json.nlinks[n].currentChapter = 0; // create field dynamically
      if (json.nlinks[n].chapters)
      {
        if (!json.nlinks[n].test) json.nlinks[n].test={state:0,submitted:0,title:"dummy",questions:[]}; // create dummy test dynamically
        for (var q=0 ; q<json.nlinks[n].test.questions.length ; q++)
        {
          json.nlinks[n].test.questions[q].response=0;
          json.nlinks[n].test.questions[q].correct=false;
        }
        for(var c=0 ; c<json.nlinks[n].chapters.length ; c++)
        {
          json.nlinks[n].chapters[c].state = (c===0?1:0); // create state field dynamically
          if (json.nlinks[n].chapters[c].sections)
          {
            json.nlinks[n].chapters[c].currentSection=0; 
            for (var s=0 ; s<json.nlinks[n].chapters[c].sections.length ; s++)
            {
              json.nlinks[n].chapters[c].sections[s].state = (s===0?1:0); // create state field dynamically
            }
          }
          else
          {
            json.nlinks[n].chapters[c].sections=[];
          }
        }
      }
      else
      {
        json.nlinks[n].chapters=[];
      }
    }
    this.setState({config: json,});
    
    
    . Toutefois, si vous souhaitez que le 060035099111110101035062 soit rempli avec vos données avant le montage, il vous suffit de remplacer le 0600350991111101035062 par le 0600350991111101035062
    2019-04-09 18: 30: 11Z
  5. J'ai réussi à mettre celui-ci dans le window.fetch, mais j'ai trouvé d'autres logiciels qu'un autre développeur avait à la place, mais pas dans le 0600350991111101035062. obtenir le require
    2019-04-09 21: 22: 32Z
this.state
source placée ici