有没有人知道为什么我没有在这个循环中定义?我想不明白...
我正在尝试通过从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");
}
});
};
你可以像上面那样创建一个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
当您的应用程序处于使用严格模式时,它将抛出错误“我未定义”
记得在使用之前初始化任何变量!
关于let
和var
你应该知道的事情
var
和let
可以改变它们的值,而const不能改变它的价值var
可以在任何地方使用,但let
和const
只能在宣布它们的区域内进入。因为我没有定义。你需要一个var或让我在i前面定义一个新变量。
for(let i = 2; i <= totalPages; i++ )
- for (i = 2; i <= totalPages; i++) {
+ for (let i = 2; i <= totalPages; i++) {