使用 react useEffect 获取问题

Posted

技术标签:

【中文标题】使用 react useEffect 获取问题【英文标题】:fetching problems with react useEffect 【发布时间】:2021-10-07 06:54:33 【问题描述】:

我在获取数据时遇到此错误,我不想使用 JSON.stringfy 我认为这不是一个好的做法,请详细解决它,谢谢

错误:对象作为 React 子对象无效(发现:对象带有键 title, episode_id, opening_crawl, director, producer, release_date, characters, planets, starships, vehicle, species, created, editing, url)。如果您打算渲染一组子项,请改用数组。

import  useState, useEffect, Fragment  from 'react';
import './App.css';

function App() 
  const [data, setData] = useState([]);
  useEffect(() => 
    const fetching = async () => 
      const response = await fetch('https://swapi.dev/api/films')
      const  results  = await response.json();
      const transformedData = results.map((el) => 
        return 
          id: el.episode_id,
          title: el.title,
          text: el.opening_crawl,
          date: el.releaseDate
        ;
      );
      setData(transformedData);
    
    fetching();
  )

  const outputedData = data.map((el) => 
    <div>
      <p>el.id</p>
      <p>el.title</p>
      <p>el.text</p>
      <p>el.date</p>
    </div>
  )

  return (
    <div className="App">
      outputedData
    </div>
  );


export default App;


console.log(results)

6) […, …, …, …, …, …]0: title: "A New Hope", episode_id: 4......

【问题讨论】:

那你想怎么显示呢?我们无法真正为您设计应用! 对象数组 另外,我建议在你的 useEffect 钩子中添加一个依赖数组,否则你将触发无限获取 完成了,有什么解决办法吗? 您不能只显示带有对象的数组。您不希望它被字符串化,所以您是否希望每个对象中的所有属性都在新行中,您是否希望它在表格中等等。您可以先自己尝试一下,让我们知道您的目标是什么? 【参考方案1】:
   <div className="App">
     data.results.map((result) => 
       <span>result.title</span>
    )
    </div>

【讨论】:

【参考方案2】:

你必须替换

const outputedData = data.map((el) => 
    <div>
      <p>el.id</p>
      <p>el.title</p>
      <p>el.text</p>
      <p>el.date</p>
    </div>
)

通过

const outputedData = data.map((el) => (
    <div key=el.id>
      <p>el.id</p>
      <p>el.title</p>
      <p>el.text</p>
      <p>el.date</p>
    </div>
))

目前,您的代码不会从 map 函数返回任何内容

请注意在显示 React 元素数组时使用 key 属性

【讨论】:

【参考方案3】:

您不能显示非 React 元素的数组。 你需要做类似的事情

return (
        <div className="App">
           data.map((title, episode_id, ...props) => 
              <div>
                <span>title</span>
                <span>episode_id</span>
              </div>
           )
        </div>
    );

【讨论】:

以上是关于使用 react useEffect 获取问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 函数组件中不使用 useEffect 钩子获取数据?

使用 React Native 和 useEffect 获取

如何在 React 的函数中获取 useEffect?

React内部useEffect中使用fetch的问题

为啥我的 axios 使用 React.useEffect 一遍又一遍地从 Rails 后端获取调用?

在 React 的 useEffect() 中获取数据返回“未定义”