我试图在ajax回调从REST api接收数据后设置组件的状态。这是我的组件构造函数的代码
constructor(props) {
super(props);
this.state = { posts: [] };
this.getPosts = this.getPosts.bind(this);
}
然后我有一个componentDidMount
方法,如下所示。
componentDidMount() {
this.getPosts();
}
现在这是我的getPosts函数,我正在执行ajax请求。
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
this.setState( { posts: data } )
}
});
}
我想要设置状态,但是我收到以下错误。
this.setState is not a function
不确定导致这种情况的原因。如果有人指出我正确的方向,那将是非常有帮助的。提前谢谢。
答案 0 :(得分:5)
还绑定回调函数,以便回调中的this
指向React Component的上下文而不是回调函数
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: (data) => {
this.setState( { posts: data } )
}
});
}
或者您可以使用类似
的绑定getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
this.setState({ posts: data })
}.bind(this)
});
}
答案 1 :(得分:3)
该问题与失去this的背景有关。 请试试这个:
let self = this;
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
self.setState( { posts: data } )
}
});
}
或者您可以使用bind:
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
self.setState( { posts: data } )
}
});
}.bind(this)
答案 2 :(得分:0)
您必须将上下文存储到变量中,因为“this”引用在回调中不可用。尝试以下解决方案:
{
"content":
{
"version" : "1.1",
"env" : "test"
}
}