当我在React Native应用程序中调用checkInList()
时,出现错误:
TypeError
:无法读取未定义的属性indexOf
myList[]
似乎是一个对象而不是数组,所以我不知道这就是为什么indexOf
不起作用的原因吗?我该怎么办?我需要它来快速运行并快速检查。还有其他选择吗?
constructor(props) {
super(props)
this.state = {
myList: []
}
}
// get string list from DynamoDB and set it locally to myList
assign() {
this.setState({myList: userData.data.getlist.mylistfromDB});
}
// Then check if my string is in the list i just set
checkInList() {
if (this.state.myList.indexOf("xyzabc") > -1) {
// In the list!
} else {
// Not in the list
}
}
答案 0 :(得分:0)
Cell-Y
是一个数组,indexOf应该与字符串一起使用。您的数据可能在检查之前尚未加载。也许myList
返回未定义。检查函数是否按正确的顺序执行,因为我假设您的数据加载调用是异步的,并且您还需要注意生命周期事件。如果您尝试渲染mylistfromDB
之后仍在加载的内容,它也可能出错。
答案 1 :(得分:0)
可能userData.data.getlist.mylistfromDB
返回undefined
您可以在调用setState
函数之前添加支票-
assign() {
let data = userData.data.getlist.mylistFromDB;
this.setState({myList: data ? data : []});
}
答案 2 :(得分:0)
如果未定义setState数据(即myList),通常会出现此错误。因此,请检查一次,如果它的undefined
不能在其中使用indexOf。
您可以执行以下操作:
assign() {
let dataToBeadded = userData.data.getlist.mylistFromDB;
this.setState({myList: dataToBeadded == undefined ? dataToBeadded : []});
}
答案 3 :(得分:0)
indexOf()是JavaScript中Array或list的属性,它指示参数中指定的元素的索引。并且Object将值存储在键值对中,因此indexOf不能用于对象上以获取索引。 / p>
var a = {1: "1", 2: "2"}
>> a.indexOf(2)
>> Uncaught reference error
var b = [1,2,3]
b.indexOf(2)
>> 1