我想在react代码中使用axios从服务器获取数据。我将axios代码放入react组件的组件willmount中,如下所示。
componentWillMount()
{
axios
.get("https://jsonplaceholder.typicode.com/Posts")
.then(function(response) {
this.setState({Posts : response.data[0].title});
})
.catch(function(error) {
console.log(error);
});
}
但上面的代码给我带来了这样的错误
TypeError: "this is undefined"
componentWillMount Redux
但当我对代码做了一些细微的修改,比如下面的代码时,一切都正常了。
componentWillMount()
{
axios
.get("https://jsonplaceholder.typicode.com/Posts")
.then(response= > {
this.setState({Posts : response.data[0].title});
})
.catch(error => {
console.log(error);
});
}
我想说的另一件事是“this”对象在componentWillMount中是活动的
有人告诉我上面两种代码的区别吗?
您需要使用箭头函数来使用此
当您使用函数()时,不能使用setState访问
将返回未定义,因为其范围不指向您创建的对象。因此,您应该使用下面的代码,此
<代码>此
工作代码:
componentDidMount()
{
axios
.get("https://jsonplaceholder.typicode.com/Posts")
.then(() => {
this.setState({Posts : response.data[0].title}); // `this` object points to your object here because of the arrow function.
})
.catch(() => { // Same case here
console.log(error);
});
}
此外,Junius对componentDidMount的看法是正确的。
调用以获取数据的最佳位置是在componentDidMount()中。componentDidMount()只在客户端调用一次,而componentWillMount()只在服务器上调用一次,在客户端调用一次。更多信息
如果使用函数(响应){…}
语法,此
不是继承的,将是未定义的
。您需要将此
显式绑定到React组件,以便它知道如何查找此。setState
:
componentWillMount()
{
axios
.get("https://jsonplaceholder.typicode.com/Posts")
.then(function(response) {
this.setState({Posts : response.data[0].title});
}.bind(this)) // <-- notice the .bind(this)
.catch(function(error) {
console.log(error);
});
}
用响应=
MDN说:
箭头函数[...]是正则函数表达式的替代方法,尽管它没有自己对“this”的绑定。
如果使用常规函数,this
指的是函数本身(这是未定义的
)。当使用箭头函数时,this
保持不变。
因此,我对Python类是新手,但对一般类不是新手。我想在我创建的对象中生成一个新的数字,并不断地改变它。
问题内容: 我正在尝试在节点中使用Express,安装一切正常,进行编译,获取npm并通过以下方式安装express: npm安装快递 问题是,每次我尝试“要求”它时,都会给我一个错误!看一下一个简单的文件app.js: 当我运行它时: 有人能帮我吗?为什么会出现此错误?如何安装与Express不同的版本? 问题答案: 问题是,你可能有最新的连接(而不是“您需要安装最新的连接”)的命令@Shrip
问题内容: 这段代码: 调用此方法: 给我一个ClassCastException->跟踪的一部分: 这很奇怪,因为,实际上,如果您查找Hibernate的源代码,它将尝试执行以下操作: 这没有任何意义… 目标的类型为Class,此代码尝试将其强制转换为Map, 为什么要尝试这样做??? 任何指针都值得欢迎… 我正在使用Hibernate 5(并且正在从3升级)… 编辑:我也使用Spring(4.
我建立了一个twitter开发帐户,并已经用它创建了一个小应用程序。今天我尝试使用cURL和Twitters oAuth签名结果页面(它为您生成cURL命令)。 我正在尝试运行以下GET 当我将其粘贴到Twitter以将其转换为我得到的cURL命令时 卷曲--获取'https://api.twitter.com/1.1/statuses/home_timeline.json“--header”授权
我在Digitalocean上安装了一个VPS服务器。安装了Ubuntu 18.04、LAMP等。最后,我安装了ffmpeg。它在终端上运行良好,但当我尝试通过php执行它时,会出现一个奇怪的“权限被拒绝”错误: 以下是一些信息: root@vl:/#何去何从ffmpeg ffmpeg: /usr/local/bin/ffmpeg root@vl:/#何去何从ff探针: /usr/local/bi
我试图在Redis上执行Spring中的函数。这让我犯了个错误。我已经成功实现了函数,但在实现时,它要求我将集合作为第二个参数。我不知道该进什么?有人能带我来吗。 这是我的multiGet()代码 方法定义: 控制器中的代码: 上面的Multiget方法的错误是 下面是Get函数的代码。 控制器中Get函数的代码: