[英]TypeError: undefined is not a function (evaluating 'this.state.list.map')
所以我试图将一个变量从我的 state 推入一个名为列表的数组。但它抛出了这个错误,说未定义不是 function。但是,当我将 push 切换到 concat 时,它起作用了。 但是我想使用 push 因为它更快。 我该如何解决这个问题?
AsyncStorage.getItem("one").then((value) => {
if (value === "true"){
this.setState({
list: this.state.list.push({
name: 'Butter',
checkbox: 1,
})
})
}
else {
this.setState({
unavailable: this.state.unavailable.push(
"butter"
)
})
}
});
我的列表是这样声明的
constructor() {
super()
this.state = {
unavailable: [],
list: []
}
}
Array.push()
不返回数组,它返回数组长度。 因此,列表从数组变为数字。 它还直接改变数组。
正如其他人所说,最好这样做:
this.setState({
list: [
...this.state.list,
{ name: 'Butter', checkbox: 1 }
]
})
这样 state 就不会直接通过使用push()
发生突变。
我想我也会为那些感兴趣的人解释发生了什么。 我们不是直接改变或更改ths.state.list
数组,而是将当前数组复制到一个新数组并同时附加新项。
如果我理解正确的话,你在将数据推送到 React state 数组时遇到了问题
您需要在 React 中将值推送到数组,如下所示。 你做的不正确,也不建议你在 React 中改变任何 state。 下面是改变 React state 数组的推荐方法
this.setState(prevState => {
list: [...prevState.list, {
name: 'Butter',
checkbox: 1,
}]
})
就像把这个改成
this.setState( prevState => {
unavailable: [...prevState.unavailable, "butter"]
})
另请记住,不建议您在循环中执行 setState。 当你想修改循环中的 state 值时,声明一个局部变量并使用它从循环中赋值,最后在循环外执行 setState 否则你会得到无限警告
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.