Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应错误-无法读取属性';设置状态';未定义的_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 反应错误-无法读取属性';设置状态';未定义的

Javascript 反应错误-无法读取属性';设置状态';未定义的,javascript,reactjs,react-native,Javascript,Reactjs,React Native,下面的代码为我返回一个错误 未捕获(承诺中)TypeError:无法读取未定义的属性“setState” 我是一个新的反应,这似乎是非常基本的。任何关于我可能做错什么的建议。根据json结果,我希望将所有名称存储在数组中 import React, { Component } from "react"; class Search extends Component { constructor(props) { super(props); this.state = { lis

下面的代码为我返回一个错误 未捕获(承诺中)TypeError:无法读取未定义的属性“setState”

我是一个新的反应,这似乎是非常基本的。任何关于我可能做错什么的建议。根据json结果,我希望将所有名称存储在数组中

import React, { Component } from "react";

class Search extends Component {
  constructor(props) {
  super(props);
  this.state = {
    list: [],
  }
}

Search() {

  fetch("http://url/getSearchResults")
    .then(res => res.json())
    .then(
      (res) => {

        this.setState({
          list: res.data.name
     })
  })
}


componentDidMount()
添加到
Search()
,在装入组件(插入到树中)后立即调用它。需要DOM节点的初始化应该在这里进行。这是从远程端点加载数据的好地方。

这是React中类的一个非常常见的问题-有两种方法可以解决此问题:

  • 在构造函数中绑定方法:
  • 改用箭头函数:
  • 有关更多信息,请参阅


    注意:使用
    componentDidMount()
    如果您试图在mount上进行fetch调用,将非常有用-上面的答案解决了
    未根据您看到的错误定义的问题。

    似乎是
    的问题。您能显示调用
    搜索
    的位置吗?将搜索声明为箭头函数:
    搜索=()=>{…}
    。请参阅以了解更多信息。刚刚注意到您的类和方法被称为同一事物-我强烈建议保持方法名称与组件名称的唯一性。这是否回答了您的问题?关于堆栈溢出,有很多很多问题,关于在Promise的
    then
    方法中未定义的
    这个
    。您研究了其中哪一个,为什么没有解决您的问题?在使用ECMAScript 2015类时,您所描述的内容是不必要的。如果原型方法是用类主体定义的,那么原型方法可以访问此
    。()这就是说,您所做的格式设置极大地澄清了OP试图做的事情是毫无意义的,我的回答是错误的。@ChrisThompson OP似乎已经消失了,所以如果您在构造函数中注释掉绑定,那么我们可能永远也不会知道——不管我的帖子是如何引用的,调用函数时,可以看到相同的错误。无论哪种方式,都会有很多困惑。。哈哈,JavaScript不是很棒吗?!是的,这种联系是有道理的。这样做的原因是,它们随后将其作为函数传递(而不是提供一个箭头函数,然后调用该函数)。如果他们打算使用类似的
    ()=>this.handleClick()
    调用,那么就没有必要了。但是你是对的,在非绑定的情况下,你会得到完全相同的错误
    constructor(props) {
      super(props);
    
      this.state = {
        list: [],
      }
    
      this.Search = this.Search.bind(this);
    }
    
    search = () => { ... }