Reactjs 将ajax调用的状态设置为插入函数外的db?

Reactjs 将ajax调用的状态设置为插入函数外的db?,reactjs,Reactjs,异步组件didmount(){ //指标 等待这个; }您真的不应该使用jQuery来检索数据。使用fetch()或axios或类似的工具 也就是说,您的问题可以通过使用箭头函数来解决。请尝试以下操作,而不是使用函数getuserData…: const getuserData = (result) => { $.getJSON({ type: 'GET', url: 'https://json.geoiplookup

异步组件didmount(){ //指标 等待这个;
}您真的不应该使用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... })