当前位置: 首页 > 知识库问答 >
问题:

如何从javascript中的API调用向React组件返回值

陆烨烁
2023-03-14

我似乎无法在javascript中将这个API调用的值返回到我的react组件。我有一个调用API的java脚本文件。在 js 文件中,返回结果,但是当我在 react 组件中调用 usingEffect 中的 js 函数时,它返回未定义。

export function ordersData() {

    const partner_code = localStorage.getItem('partner_code')

    let items = []
    let data = []
    let isLoaded = false
    let error = ''

    fetch('xxxxxxxxxxxx' + process.env.REACT_API)
        .then(res => res.json())
        .then((result) => {
            for (let instance in result['docs']) {
                let payload = (result['docs'][instance])

                payload.id = instance

                payload.timestamp = shortMonthYear(payload.timestamp)

                data.push(payload)
            }

            items = data.reverse()

        }, (err) => {
            isLoaded(true)
            error(err)
        })
}

这是我的rect组件

导出默认函数OrdersChart() {

const [payload, setPayload]  = useState([])
const [error, setError] = useState(null);
const [isLoaded, setIsLoaded] = useState(false);
const [items, setItems] = useState([]);

useEffect(() => {
    setPayload = ordersData()
    console.log(payload)
}, [])

........

变量有效负载为空

共有3个答案

李言
2023-03-14

这个函数不返回任何东西。你只需将有效载荷值推入数据,即一个局部变量。您可以使用state并通过setState设置值。

丌官盛
2023-03-14

我找到的最干净的方法

将父组件更改为this

useEffect(() => {
   newFunctionName();
}, [])

async function newFunctionName(){
   const response = await ordersData();
   console.log(response)
   // you can then set all your states directly in here
}

将api调用组件更改为此。

export default async function ordersData() {
    try{
        const res = await fetch('xxxxxxxxxxxx' + process.env.REACT_API)
        return res
    } catch(err){
      console.log(err)
      return(err)
    }
}

现在,您在父组件中具有响应,并且可以从那里设置状态。

狄楷
2023-03-14

您需要使用 React 钩子进行 API 调用并存储数据。您可以使用 useEffect 钩子来调用 API,并使用 useState 在状态中存储数据。

const { useState } = React;

function useFetchData() {
  const [loading, setLoading] = React.useState([]);
  const [data, setData] = React.useState([]);

  React.useEffect(() => {
    setLoading(true);
    fetch("https://randomuser.me/api/?results=10")
      .then((response) => response.json())
      .then((responseJson) => {
        setData(responseJson.results);
        setLoading(false);
      })
      .catch((error) => {
        console.error(error);
        setLoading(false);
      });
  }, []);

  return { loading, data };
}

function App() {
  const { loading, data } = useFetchData();
   
  if(loading){
   return <p>Loading... </p>
  }

  return (
    <div>
      {data.map((item) => (
        <div>{item.name.first}</div>
      ))}
    </div>
  );

}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>
 类似资料:
  • 问题内容: 我如何使这个小功能“ imageExists”返回ajax请求是否成功? 问题答案: 我相信您将必须使用同步模式并使用单独的变量来存储返回值。

  • 问题内容: 我正在寻找一种更好的解决方案,以使用jQuery进行AJAX调用,使PHP文件返回一个数组,并将其作为Javascript数组从客户端发布。这是我一直在做的事情: PHP文件(Example.php): JS档案: 我目前的方法对我的口味来说有点太复杂了。 我想做的就是能够 在PHP方面,并在AJAX调用后将其直接转换为Javascript数组。 想法,有人吗? 问题答案: 使用JSO

  • 我正在运行一个方法来导入一个外部组件,该组件仅与Options API一起工作。因此,一旦导入完成,我就需要使用Options API配置组件。 如何访问Options API的区域中的返回的值?这就是我的意思: 如果我运行上面的代码,我会得到错误:。 在本例中,仅与VUE中的Options API一起工作。在可预见的将来,它不能在组合API中配置。因此,如何使用组合API中的引用值在Option

  • 我是React的新手,我的第一个项目涉及创建一个包含日期选择器(使用React Datepicker)的表单(使用react-Hook-form创建)。到目前为止,一切正常,除了我的日期选择器,当单击时,它不会用新选择的日期更新表单字段。 该项目的结构如下: FormDate。js 我已经按照react hook form Controller文档使用了控制器组件,因为我最终需要使用条件逻辑,并且

  • 在本教程中,他们将一个回调函数从父组件传递到子组件,并从子组件传递到子组件。我的问题是如何设置参数?我的猜测是,起点是在组件中调用。从那以后,我就不知道是如何进入的了。它是否存储在“on click方块板”中?

  • 我已经实现了一个返回一个值或者抛出一个异常的控制器方法。 在此代码中,我只想在警告级别记录异常消息,而不是抛出异常,因为我不想看到类似以下内容: 所以如果我把 到第一个catch语句,它给出 缺少返回语句 该catch块的错误。所以,如何处理不向调用api抛出异常,只正确发送异常消息,因为方法的返回类型是dto?