【问题标题】:fetch data react .map is not a function获取数据反应 .map 不是函数
【发布时间】:2021-09-16 07:19:51
【问题描述】:

为什么这段代码给我:TypeError: items.map is not a function

  const [items, setItems] = useState([])

  const url = 'https://rickandmortyapi.com/api/character/1'

  useEffect(() => {
    async function fetchEmployees() {
      const response = await fetch(url)
      const fetchedEmployees = await response.json(response)
      setItems(fetchedEmployees)
    }
    fetchEmployees()
  }, [])

  return (
    <div>
      {items.map((element) => (
        <li>{element.name}</li>
      ))}
    </div>
  )
}

【问题讨论】:

  • 什么fetchedEmployees?另外,您为什么将response 传递给response.json
  • 确保await response.json(response) 为您提供了一个数组,因为.map 只能用于数组。
  • 我复制了“如何从 api 获取”,因为我认为我的代码可能无效并且我没有更改函数的名称
  • 你需要检查 response.status 或 response.ok 或 response.statusText

标签: reactjs react-hooks fetch fetch-api use-effect


【解决方案1】:

我在您的代码中发现了两个问题。

首先,API 链接“https://rickandmortyapi.com/api/character/1”返回一个对象,而不是一个数组。您不能将map 用于对象,因为map 是一个数组函数。重新检查 API 的 URL 并相应地调整您的代码以匹配您的值的形状。

其次,对于你的fetchEmployees()函数,你只需要const fetchedEmployees = await response.json()

在这种情况下,我们鼓励您使用“打印调试”——将console.log 放在各处以了解内部工作原理。例如,您可以在此处放置 console.log 以查看您得到了什么(一个对象),您应该了解为什么 map 无法处理它

async function fetchEmployees() {
      const response = await fetch(url);
      const fetchedEmployees = await response.json();
      console.log("fetchedEmployess", fetchedEmployees);
      setItems(fetchedEmployees)
    }
``

【讨论】:

    【解决方案2】:

    您无需在response.json() 中传递响应。

    useEffect(() => {
        async function fetchEmployees() {
          const response = await fetch(url)
          const fetchedEmployees = await response.json()
          setItems(fetchedEmployees)
        }
        fetchEmployees()
      }, [])
    

    由于您的 API 不返回数组,因此您不能在 items 上使用 map。以下应该做的

    return (
        <div>
            <li>{items.name}</li>
        </div>
      )
    

    如果您尝试获取对象数组,您可能应该检查另一个端点,该端点返回像 https://rickandmortyapi.com/api/character 这样的字符数组。然后,您可以通过 items.results 映射以在组件的 JSX 中输出 name

    【讨论】:

    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2021-09-19
    • 2022-08-11
    • 1970-01-01
    相关资源
    最近更新 更多