有人知道为什么我没有在这个循环中定义吗?我不知道...
我正在尝试对从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");
}
});
};
答案 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
查看更多由于您的应用处于使用限制模式,因此将引发错误“未定义我”
请记住在使用任何变量之前对其进行初始化!
结合您应该了解的let
和var
var
和let
可以更改其值,而const不能更改其值var
可以在函数中的任何位置访问,但是let
和const
仅在声明它们的块内可访问 >。答案 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++) {