1
votes

i n'est pas défini pour la boucle dans le projet react

Quelqu'un a-t-il une idée de la raison pour laquelle je ne suis pas défini dans cette boucle? je ne peux pas le comprendre ...

J'essaye de paginer à travers les pages de données reçues d'une api et de les rassembler dans un seul tableau et de les stocker dans l'état, mais ma boucle for ne semble pas fonctionner à cause de l'erreur: "je n'est pas défini"

comment dois-je faire autrement ???

gatherAllCharacters = () => {
    fetch(`https://rickandmortyapi.com/api/character/`)
      .then(res => res.json())
      .then(data => {
        let characters = data.results;
        const totalPages = data.info.pages;
        if (totalPages > 1) {
          for (i = 2; i <= totalPages; i++) {
            let page = i;
            fetch(`https://rickandmortyapi.com/api/character/?page=${i}`)
              .then(res => res.json())
              .then(data => {
                characters = characters.concat(data.results);
                if (page === totalPages) {
                  this.setState({ allCharacters: characters });
                }
              });
          }
        } else {
          console.log("none");
        }
      });
  };


0 commentaires

3 Réponses :


1
votes
- for (i = 2; i <= totalPages; i++) {
+ for (let i = 2; i <= totalPages; i++) {

0 commentaires

2
votes

Parce que i n'est pas défini. Vous avez besoin d'un var ou d'un let devant i pour définir une nouvelle variable.

for(let i = 2; i <= totalPages; i++ )


1 commentaires

"Sinon, il le place dans la portée globale" si tel était le cas, OP n'obtiendrait pas une ReferenceError



8
votes

Vous pouvez créer une boucle for comme vous l'avez fait ci-dessus

 for (let i = 2; i <= totalPages; i++) {
     //perform loop
 }

Cependant, cela génère une variable i dans l'espace de noms global et c'est généralement une mauvaise idée.

par conséquent, vous devez initialiser i avant de l'utiliser comme ceci:

 for (i = 2; i <= totalPages; i++) {
     //perform loop
 }

Par conséquent, l'ECMA a décidé d'avoir un mode dans lequel cela (et mes autres fonctionnalités qui provoqueraient des effets secondaires indésirables seraient à la place une erreur).

Pour en savoir plus, cliquez ici https://www.w3schools.com /js/js_strict.asp

Comme votre application est en mode strict d'utilisation, elle lancera l'erreur "i is not defined"

N'oubliez pas d'initialiser toute variable avant de l'utiliser!


Associez les choses que vous devez savoir sur let et var

  1. var et let peuvent changer leur valeur et const ne peut pas changer sa valeur
  2. var peut être accessible n'importe où dans la fonction mais let et const ne peuvent être accessibles qu'à l'intérieur le bloc dans lequel ils sont déclarés .


1 commentaires

Je pensais que le mode strict n'était PAS le mode par défaut dans React?