Javascript ReactJS处理API调用-每次使用组件时数据都会更改

Javascript ReactJS处理API调用-每次使用组件时数据都会更改,javascript,reactjs,Javascript,Reactjs,在我的项目中,我使用的数据基本上是每次获取数据时都会返回一个随机的人 我创建了一个组件(为了解决这个问题,我简化了它),它返回API获取的人的名字。但是,如果我两次使用该组件,则始终会得到两个不同的名称。如何在使用相同的数据集(如下面的代码所示,该数据集每10秒刷新一次)的同时重用组件并对其进行自定义(使用道具等) import React,{Component} from "react"; import { makeStyles } from '@material-ui/styles'; im

在我的项目中,我使用的数据基本上是每次获取数据时都会返回一个随机的人

我创建了一个组件(为了解决这个问题,我简化了它),它返回API获取的人的名字。但是,如果我两次使用该组件,则始终会得到两个不同的名称。如何在使用相同的数据集(如下面的代码所示,该数据集每10秒刷新一次)的同时重用组件并对其进行自定义(使用道具等)

import React,{Component} from "react";
import { makeStyles } from '@material-ui/styles';
import Budgetdata from './Budgetdata.js'
import Caption from './Caption.js'





export default class Apicall extends Component {


    intervalID;
constructor(props) {

  super(props);

    this.state = {
      loading:true,
      person:[],
    random: 0,
    name:"name"};

    }




      async getdata () {

        const url = "https://api.randomuser.me/";
        const response = await fetch(url);
        const data = await response.json();
              var value = Math.round(Math.random())
        this.setState({ person: data.results[0],loading:false,random: value,name:"name"})


      }


      async componentDidMount() {

     this.getdata()

      this.intervalID = setInterval(this.getdata.bind(this), 10000);


      }


      async componentWillUnmount() {

        clearInterval(this.intervalID);
      }






      render = props =>  {

        if (this.state.loading || !this.state.person) {

          return (<div>loading..</div>)
        }
        else
        {

        return(

          <div>{this.state.person.name.first}</div>


        )
        }

      }

    }

import React,{Component}来自“React”;
从'@material ui/styles'导入{makeStyles};
从“./Budgetdata.js”导入Budgetdata
从“./Caption.js”导入标题
导出默认类Apicall extends组件{
有效期;
建造师(道具){
超级(道具);
此.state={
加载:对,
人员:[],
随机:0,,
名称:“名称”};
}
异步getdata(){
常量url=”https://api.randomuser.me/";
const response=等待获取(url);
const data=wait response.json();
var value=Math.round(Math.random())
this.setState({person:data.results[0],load:false,random:value,name:“name”})
}
异步组件didmount(){
这个文件名为getdata()
this.intervalID=setInterval(this.getdata.bind(this),10000);
}
异步组件willunmount(){
clearInterval(此为有效期);
}
渲染=道具=>{
if(this.state.loading | | |!this.state.person){
返回(加载…)
}
其他的
{
返回(
{this.state.person.name.first}
)
}
}
}
基于 Wait在前端没有得到很好的支持。我建议您使用Axios库

另一方面,如果需要使用反应组件两次,则可能需要使用反应组件键字段,如下所述: