我试图通过看起来像
的AJAX调用从我的服务器获取一些数据fetch_reviews() {
var scraper_url = this.props.thing.text
var all_the_data = $.get({
url: window.location.origin+'/fetch_review_data',
data: {scraper_url: scraper_url}
}).success(function(data){
this.state.allReviews = data
});
}
onle我一直收到错误"无法读取未定义的属性 allReviews "
如何从success
函数中设置 allReviews 的状态?
答案 0 :(得分:2)
您应该使用arrow function
(如果您使用ES2015)或.bind
来设置将引用您的Component对象的this
,因为现在this
指的是全局范围(window
或undefined
如果您使用strict mode
),
// ...
.success((data) => {
this.setState({ allReviews: data })
});
或
// ...
.success(function (data) {
this.setState({ allReviews: data })
}.bind(this));
如果您需要在React中设置新状态,则必须使用setState
方法
答案 1 :(得分:0)
当您的状态附加到您的fetch中无法访问的react的执行范围时,您的this
更改为$.get
执行范围。因此,请将this
保存在变量中......
fetch_reviews() {
var scraper_url = this.props.thing.text;
var that = this; // hold this in another variable
var all_the_data = $.get({
url: window.location.origin+'/fetch_review_data',
data: {scraper_url: scraper_url}
}).success(function(data){
that.setState({allReviews : data });
});
}