我没有为反应项目中的循环定义[关闭]

问题描述 投票:0回答:3

有没有人知道为什么我没有在这个循环中定义?我想不明白...

我正在尝试通过从api接收的数据页面进行分页并将其全部收集到一个数组中并将其存储在状态中,但由于错误,我的for循环似乎不起作用:“我没有定义”

我该怎么办呢?

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");
        }
      });
  };
javascript reactjs pagination
3个回答
6
投票

你可以像上面那样创建一个for循环

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

然而,这会在全局命名空间中生成变量i,这通常是一个坏主意。

因此你应该在使用它之前初始化我:

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

因此,ECMA决定采用一种模式(这会导致不良副作用的其他功能会引发错误)。

在这里看到更多https://www.w3schools.com/js/js_strict.asp

当您的应用程序处于使用严格模式时,它将抛出错误“我未定义”

记得在使用之前初始化任何变量!


关于letvar你应该知道的事情

  1. varlet可以改变它们的值,而const不能改变它的价值
  2. var可以在任何地方使用,但letconst只能在宣布它们的区域内进入。

2
投票

因为我没有定义。你需要一个var或让我在i前面定义一个新变量。

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

1
投票
- for (i = 2; i <= totalPages; i++) {
+ for (let i = 2; i <= totalPages; i++) {
© www.soinside.com 2019 - 2024. All rights reserved.