Асинхронный вызов функции повторяется внутри компонента класса

#javascript #reactjs #asynchronous #promise

Вопрос:

Я создал асинхронную функцию для вызова погодного API, которая вернет отправленную запрошенную информацию. Функция работает нормально, однако, когда я вызываю эту функцию внутри компонента класса, результат возвращается дважды. Это не совсем ошибка, но я бы предпочел, чтобы не было двух вызовов API, если в этом нет необходимости, и мне любопытно, почему этот метод вызывается дважды в первую очередь.

Вот мой код.

  async function submitQuery(props) {  //Incase I decide to add aditional parameters such as city, country etc.. I've decided to place the zip property in an object so I can just  //add additional properties in the submissions object  const submission = {  zip: props,  };   if (!Number(props)) return console.log("this is not a number");   const { error } = await validate(submission);  if (error) return console.log(error.message);   const config = {  method: "get",  url: `https://api.openweathermap.org/data/2.5/weather?zip=${props}amp;appid=${apiKey}`,  headers: {},  };   /*  const query = await axios(config).then(function (response) {  const result = response.data.main;  return result;  });  */   //console.log(query);  return 4; }  
 class WeatherReport extends React.Component {  getResults = async () =gt; {  const result = await submitQuery("08060");  console.log(result);  };   render() {  return (  lt;div className="reportContainer"gt;  lt;WeatherCard getResults={this.getResults} /gt;  lt;/divgt;  );  } }  
  const WeatherCard = ({ getResults }) =gt; {  getResults();  return lt;divgt;lt;/divgt;; };  

Ответ №1:

Проблема в том , что вы вызываете getResults метод визуализации WeatherCard , переместите его в a useEffect , чтобы он не вызывался каждый раз

 const WeatherCard = ({ getResults }) =gt; {  React.useEffect(() =gt; {  getResults();  }, [getResults]);  return lt;divgt;lt;/divgt;; };