javascript - .map 在更新状态后没有重新渲染

标签 javascript reactjs dictionary setstate

我已经使用 useEffect 获取了数据,并且还在控制台上获取了数据。我调用了 setState 方法来更新状态,但是 .map 函数不起作用。即使在控制台上也没有发生任何事情。

 import React, { useState, useEffect } from "react";


function HomePage() {
  const [isFlipped, setIsFlipped] = useState(false);

  const [cardData, setCardData] = useState([]);

  // useEffect function
  useEffect(async () => {
    const url = "https://rickandmortyapi.com/api/character";

    const fetchData = async () => {
      try {
        const response = await fetch(url);
        const json = await response.json();
        const jsonData = json.results;
        setCardData(jsonData);
        console.log(jsonData);
      } catch (error) {
        console.log("error", error);
      }
    };
    fetchData();
  }, []);

  const handleClick = () => {
    setIsFlipped(!isFlipped);
  };

  return (
    <>
      
      {cardData.map((c) => {
        <h1>{c.id}</h1>;
      })}
     
    </>
  );
}

export default HomePage;

最佳答案

您的代码有一些错误:

  • 您不需要/不能在 useEffect 回调上使用 async 关键字,只需声明该函数并调用它。
  • 主要问题,您的 map 永远不会返回任何内容。如果使用花括号,则必须使用 return 关键字返回
  • 不那么重要,但是如果将 cardData 初始化为 null,则可以在映射之前检查它是否为真。
  • 至于为什么console什么都没有显示,setState是async/下一次渲染更新状态的请求,因此无法立即观察到状态变化

  • 以下代码适用于代码沙箱,如果您有任何问题,请告诉我。
    export default function HomePage() {  {
      const [isFlipped, setIsFlipped] = useState(false);
    
      const [cardData, setCardData] = useState(null);
    
      // useEffect function
      useEffect(() => { //removed async here
        const url = "https://rickandmortyapi.com/api/character";
    
        const fetchData = async () => {
          try {
            const response = await fetch(url);
            const json = await response.json();
            const jsonData = json.results;
            setCardData(jsonData);
            console.log(jsonData);
          } catch (error) {
            console.log("error", error);
          }
        };
        fetchData();
      }, []);
    
      const handleClick = () => {
        setIsFlipped(!isFlipped);
      };
    
      return (
        <>
          {cardData && cardData.map((c) => {
            return <h1>{c.id}</h1>; //note here: return keyword
          })}
        </>
      );
    }
    

    关于javascript - .map 在更新状态后没有重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71058584/

    相关文章:

    javascript - 如何更改 jquery .toggle() 以使用显示 :table-cell?

    javascript - 如何将事件对象传递给嵌套函数?

    reactjs - useState() 进行双重渲染

    python - 计算字典中的值

    Python:如何将 { apple: "1", orange: "2"} 解析为字典?

    javascript - 如何使用 handlebars.js 的值过滤此数组?

    javascript - 以字符串形式返回一个元素 输出未定义

    javascript - 使用以数组为键的 JavaScript Map,为什么我无法获取存储的值?

    javascript - 在选项卡 Material 设计精简版中添加图标按钮

    javascript - 响应美化 URL