Javascript TypeError:undefined不是函数(计算';this.state.list.map';)
所以我试图将一个变量从我的状态推送到一个名为list的数组中。但它抛出了这个错误,说未定义不是一个函数。然而,当我切换push到concat时,它工作了。但我想使用推送,因为它更快。如何解决此问题Javascript TypeError:undefined不是函数(计算';this.state.list.map';),javascript,reactjs,react-native,Javascript,Reactjs,React Native,所以我试图将一个变量从我的状态推送到一个名为list的数组中。但它抛出了这个错误,说未定义不是一个函数。然而,当我切换push到concat时,它工作了。但我想使用推送,因为它更快。如何解决此问题 AsyncStorage.getItem("one").then((value) => { if (value === "true"){ this.setState({ list: this.state.list.push({ name:
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 }
]
})
这样,使用push()
不会直接改变状态
我还想解释一下这件事发生了什么。我们将当前数组复制到一个新数组中,并同时附加新项,而不是直接修改或更改
th.state.list
数组。如果我理解正确,您在将数据推送到React state数组中时会遇到问题
您需要在React中将值推送到数组中,如下所示。你们的做法是不正确的,也不建议你们在React中改变任何状态。下面是修改React状态数组的推荐方法
this.setState(prevState => {
list: [...prevState.list, {
name: 'Butter',
checkbox: 1,
}]
})
把这个换成
this.setState( prevState => {
unavailable: [...prevState.unavailable, "butter"]
})
还要记住,不建议您在循环中执行setState。当您要修改循环中的状态值时,请声明一个局部变量,并使用该局部变量从循环中赋值,最后在循环外设置state,否则您将收到无限警告,其中是
this.state.list.map
??发布准确的错误。不要使用push()
,它会改变从中调用它的数组。blacky wolf首先回答说:“你不应该在React中直接改变状态。哦,我从这个.state.list.map中添加了一点。问题是我的应用程序现在有点慢,我想试着用push来加速它,如果我的canthanks堆的话。”。这是React中处理数组的不同且推荐的方法。