Не получает ответа при вызове API с использованием axios в React

#reactjs #react-native

#reactjs #react-native

Вопрос:

Я совсем новичок в React, и я пытаюсь получить ответ от weatherapi.com . Однако я не был очень успешным. Ниже приведен мой фрагмент кода:

 const api_call = async () => {
    const url = 'https://api.weatherapi.com/v1/current.json?key='   API_KEY   'amp;q=Singapore'
    const request = axios.get(url)
    const response = await request
    console.log('url - '   url)
    console.log('request - '   request)
    console.log('response - '   response)
}
useEffect(() => {
    api_call()
}, [])
 

журнал консоли, который был напечатан (мне пришлось отредактировать ключ API) :

 url - https://api.weatherapi.com/v1/current.json?key=xxxxxxxxxxamp;q=Singapore 
request - [object Promise] 
response - [object Object]
 

Я перешел по следующей сгенерированной ссылке, и она действительно показывала нужные мне данные в браузере.

Моя версия axios — 0.21.1, если это поможет.

Теперь я хочу, чтобы ответ был напечатан в консоли, просто чтобы я мог убедиться, что я действительно получил ответ. Я что-то пропустил? Заранее спасибо.

Ответ №1:

    const api_call = async () => {
    try {
      const url =
        "https://api.weatherapi.com/v1/current.json?key="  
        API_KEY  
        "amp;q=United States";
      const request = await axios.get(url);
      console.log(request.data);
    } catch (err) {
      console.log(err.message, " ", err.code);
    }
  };
  useEffect(() => {
    api_call();
  }, []);
 

вам нужно было получить доступ к объекту данных из запроса axios, вам не нужно было указывать ответ, как указано ниже

Ответ №2:

request и response являются объектами. Передача a string object на консоль.журнал преобразует объект в строку. Итак, если вы хотите распечатать содержимое объекта, вы должны использовать console.log следующее

 console.log('response -', response)
 

Ответ №3:

Это был плохой вопрос. Произошло не то, что я не получил ответа, а то, что ответ не был строкой (это был JSON).

Я использовал JSON.stringify(), чтобы превратить его в строку.

Ответ №4:

Я думаю, что вы успешно получаете ответ, но проблема в том, как вы пишете его на консоли.

 console.log('response -'   response)
 

В приведенном выше console.log объект ответа будет преобразован в строку (поскольку вы пытаетесь объединить его со строкой), так что именно по этой причине вы видите, что [object object] на консоли.

Вместо этого используйте:

 console.log('response -', response);
 

Это даст правильное значение ответа на консоли.(Включая URL, данные, статус и т. Д.)

Если вам просто нужны данные, используйте:

 console.log('response -', response.data)