Reactjs 将ajax调用的状态设置为插入函数外的db?
异步组件didmount(){ //指标 等待这个;Reactjs 将ajax调用的状态设置为插入函数外的db?,reactjs,Reactjs,异步组件didmount(){ //指标 等待这个; }您真的不应该使用jQuery来检索数据。使用fetch()或axios或类似的工具 也就是说,您的问题可以通过使用箭头函数来解决。请尝试以下操作,而不是使用函数getuserData…: const getuserData = (result) => { $.getJSON({ type: 'GET', url: 'https://json.geoiplookup
}您真的不应该使用jQuery来检索数据。使用
fetch()
或axios
或类似的工具
也就是说,您的问题可以通过使用箭头函数来解决。请尝试以下操作,而不是使用函数getuserData…:
const getuserData = (result) => {
$.getJSON({
type: 'GET',
url: 'https://json.geoiplookup.io/api?callback=?',
success: (data) => {
console.log(data);
// I have access to data in this function
this.setState({
userIp: data.ip
})
},
})
}
请注意,箭头函数中的this
绑定到父函数的this
另外,请记住在组件构造函数上绑定forumMetrics
函数
编辑:
我没有看到你在任何地方调用getuserData()
编辑2:
您可能希望将getUserData
作为一个单独的函数,如下所示:
async forumMetrics(data){
const data = await this.getuserData();
console.log(data);
this.setState({
userIp: data.ip,
userCity: data.city,
userRegion: data.region,
userCountry: data.country_name,
userLatitude: data.latitude,
userLongitude: data.longitude
});
}
getUserData(data) {
return new Promise((accept, reject) => {
$.getJSON({
type: 'GET',
url: 'https://json.geoiplookup.io/api?callback=?',
success: accept,
})
});
}
请注意,async
函数中的wait
关键字将等待承诺完成,并使用接受的值继续执行
只需使用fetch
getUserData() {
return fetch('https://json.geoiplookup.io/api?callback=?');
}
forumMetrics()调用
您的forumMetrics
函数未绑定,因此此
很可能未定义。您可以在构造函数中绑定它
constructor() {
this.forumMetrics = this.forumMetrics.bind(this);
}
或者像这样声明:
forumMetrics = async () => {
}
后者是实验性的语法
setState()调用
如果选择回调中的第一个选项,您的this
肯定不会指向类。如果要使用jQuery进行ajax获取,则在self
变量中捕获引用(这是一种不好的做法,但在React上使用jQuery也是如此):
你能在你的组件中的哪个部分调用这个函数(forumMetrics)吗?所以我的问题是我没有使用箭头函数而不是常规的js函数?这太简单了。您可以使用常规函数,但需要同时绑定这两个函数。请注意,您有一个
函数getuserData(result)
和一个函数(data)
函数,并且您只绑定了后面的一个。好的。但我如何从函数外部访问该状态?现在,我只能从getuserData
函数中访问状态。尽管我得到了它,但我只需将我的服务人员移动到getuserData
函数中,它就工作了。非常感谢。好的,谢谢你的建议。看起来我还需要更多的异步函数的练习。我将稍微研究一下。
async forumMetrics(){
const self = this;
function getuserData(result) {
...
self.setState({ ...stuff here... })