我正试图在我的数据库中注册管理员,但在数据库中注册该管理员后,它不断抛出错误;未处理的拒绝(TypeError(:adminList不可迭代
const request = axios.post(`/api/admin/register-admin`,admin)
return (dispatch) =>{
request.then(({data})=>{
let admins = data.success ? [...adminList, data.admin]:adminList // this is where the error is pointing at
let response = {
success:data.success,
admins
}
dispatch({
type:'ADMIN_REGISTER',
payload:response
})
})
}
} ```
您使用的是adminList
,但我看不出这个变量是在哪里定义的。我想,你忘了定义它,所以它是undefined
,当你试图将undefined
扩展为[...undefined]
时,你会得到这个错误。
您需要了解错误是什么:当您想要迭代尚未实现可迭代协议的东西时,就会出现此错误。例如:
var obj = { 'France': 'Paris', 'England': 'London' };
for (let p of obj) { // TypeError: obj is not iterable
// …
}
如何使其成为可迭代协议:
Instead you have to use Object.keys or Object.entries, to iterate over the properties or entries of an object.
var obj = { 'France': 'Paris', 'England': 'London' };
// Iterate over the property names:
for (let country of Object.keys(obj)) {
var capital = obj[country];
console.log(country, capital);
}
for (const [country, capital] of Object.entries(obj))
console.log(country, capital);
在您的情况下,我看不到adminList,也看不到它在哪里被声明和赋值。所以,我认为您需要对对象进行迭代,并将其分配给数组。这在使用扩散操作符时是不可能的,您不能将对象扩散到数组中。
var obj = {'test': 'test 1'};
var obj1 = {...obj};
console.log(obj1);
var arr = [1, 2, 3];
var arr1 = [...arr];
console.log(arr1);
// now when you spread obj to array or vice versa you wil get the type error
var arr1 = [...obj];
var obj2 = {...arr1};
欲了解更多信息,请阅读本文。