Javascript TypeError:undefined不是函数(计算';this.state.list.map';)

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:

所以我试图将一个变量从我的状态推送到一个名为list的数组中。但它抛出了这个错误,说未定义不是一个函数。然而,当我切换push到concat时,它工作了。但我想使用推送,因为它更快。如何解决此问题

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中处理数组的不同且推荐的方法。