在 React 中,如何修复从子组件传递到父 React 功能组件的 infinite/loop 数据

In React, how to fix the infinite/loop data passing from the child component to parent react functional component

我正在使用 prop 将数据从子组件传递到父功能组件。两者都是不同的js文件。每当我使用 prop 时,我都会从子组件中获取 infinite/loop 数据。我应该如何解决这个问题?

这导致我的 React 应用无法正确加载并崩溃。
尽管使用了下面的 React 功能组件,但我能够在没有来自 React Class 组件的循环的情况下正确检索数据,所以我假设是 CallAPI.js 功能 class 问题

子组件:DropDownList.js
如下所示...

class DropDownList extends React.Component {

//--body
  render() {

    return (
      <div>
      <CallAPI age={27}/>
      </div>
    );
  }
}

export default DropDownList;

父组件:CallAPI.js
如下所示..

const CallAPI = () =>{ //create a CallAPI function
  
const [DPID, setText] = useState("");
const [Quote, setText1] = useState("");

let gcmpapi =
  "https://gcm.dellsvc/GCM.Order.API/api/v1/orders/"+ DPID +"/purchase-summary-with-details?countryCode=US"; // declare a variable to store the URL

const [finalprice,setGCMP1] = useState('');
const [totaltax,setGCMP2] = useState('');
const [ShippingAmount,setGCMP3] = useState('');
const [CostPrice,setGCMP4] = useState('');
const [MarginTotal,setGCMP5] = useState('');
const [ListPrice,setGCMP6] = useState('');
const [SellingPrice,setGCMP7] = useState('');
const [DiscountValue,setGCMP8] = useState('');

  const callgcmpapi = () => { //assign a variable for a call function
    Axios.get (gcmpapi).then(
      (response) => { //Success
      console.log(response);
      setGCMP1(response.data.Data.PurchaseSummary.PriceSummary.FinalPrice); // call the value from the multi-dimensional array
      setGCMP2(response.data.Data.PurchaseSummary.PriceSummary.TaxTotal);
      setGCMP3(response.data.Data.PurchaseSummary.PriceSummary.ShippingAmount);
      setGCMP4(response.data.Data.PurchaseSummary.PriceSummary.CostPrice);
      setGCMP5(response.data.Data.PurchaseSummary.PriceSummary.MarginTotal);
      setGCMP6(response.data.Data.PurchaseSummary.PriceSummary.ListPrice);
      setGCMP7(response.data.Data.PurchaseSummary.PriceSummary.SellingPrice);
      setGCMP8(response.data.Data.PurchaseSummary.PriceSummary.DiscountValue);
      })
  };

无限数据循环:Please see the screenshot

您应该在 useEffect() 挂钩中调用 API,您的 api 将在组件安装后调用:

例如:

useEffect(() => {
  (async() {
    const data = await fetch(...);
    // do something with the data 
  })
}, []) // passing empty dependency for useEffect it should be called one time when component mounted `