我没有在React项目中为循环定义

时间:2019-03-03 03:18:07

标签: javascript reactjs pagination

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

我正在尝试对从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");
        }
      });
  };

3 个答案:

答案 0 :(得分:5)

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

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

但是,这会在全局名称空间中生成变量i,这通常是个坏主意。

因此,您应该像这样使用它之前初始化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仅在声明它们的块内可访问 >。

答案 1 :(得分:2)

因为未定义i。您需要var或让i前面定义一个新变量。

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

答案 2 :(得分:1)

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