javascript - 如何从 React 组件中获取对象

标签 javascript react-native api axios

我正在使用 API 制作天气应用程序,我在函数中成功接收了 API 的数据,但无法将其从函数中取出

这是代码

import React, {useState} from 'react'
import {Text, View} from 'react-native'
const axios = require('axios');


let HomeScreen =() => {
  let key = "XXXX"
  axios.get(`https://api.weatherapi.com/v1/current.json?key=${key}&q=London&aqi=no`)
  .then(function (response) {
    // handle success
    console.log(response)
  })
  return(
    <Text>This is {response}</Text>
  )
}

export default HomeScreen

最佳答案

如果您只想从 API 返回数据,请使用普通的 JS 函数,而不是 React 组件。

function getData() {
  return axios(`https://api.weatherapi.com/v1/current.json?key=${key}&q=London&aqi=no`)
}

它将返回一个 Promise,然后您可以在其他地方使用它。

async main() {
  const data = await getData();
}

如果您希望组件渲染从 API 检索到的数据,您需要采取不同的做法。

使用useEffect在组件安装时运行一次,并使用useState在检索数据后存储数据。然后状态将通知 JSX 如何渲染。

请注意,API 的响应是一个具有 locationcurrent 属性的对象。您不能将其添加到 JSX,因为 React 不会接受它。因此,根据您需要从数据中获得什么值(value),您需要专门针对它。

以下示例从 current 对象的条件对象返回 text 值:“It is Sunny”。

const { useEffect, useState } = React;

function Example() {

  // Initialise your state with an empty object
  const [data, setData] = useState({});

  // Call useEffect with an empty dependency array
  // so that only runs once when the component is mounted
  useEffect(() => {

    // Retrieve the data and set the state with it
    async function getData() {
      const key = 'XXX';  
      const data = await axios(`https://api.weatherapi.com/v1/current.json?key=${key}&q=London&aqi=no`)
      setData(data.data);
    }

    getData();

  }, []);

  // If there is no current property provide a message
  if (!data.current) return <div>No data</div>;

  // Otherwise return the current condition text
  return (
    <p>It is {data.current.condition.text}</p>
  );

}

关于javascript - 如何从 React 组件中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70081056/

相关文章:

javascript - 无法使用 React hooks 读取未定义的属性 'map'

javascript - 在 SPA 中创建干净的 ID 空间的常见解决方案是什么?

javascript - React-Native:虽然前面有声明,但 undefined 不是对象

mongodb - 在API端点中使用mongodb对象ID的base64编码是否安全?

php - Foreach排序

c++ - LibreOffice C++ API 缺少 header

javascript - 为什么这些绑定(bind)函数的 "this"上下文在每个新实例中都相同?

javascript - 无法使用方法(传递)索引作为参数从数组中检索数据

android - 构建一个使用 Android AAR 库的 React Native 模块

javascript - React-native-camera - 类型错误 : undefined is not an object