NodeJS useEffect()钩子问题,未填充基于fetch API的数组

fcipmucu  于 2023-04-20  发布在  Node.js
关注(0)|答案(1)|浏览(92)
function RecipesList() {
  //use effect to
  useEffect(() => {
    const getRecipesList = async () => {
      const response = await fetch("http://localhost:4000/recipe/allrecipes", {
        method: "GET",
      });
      const json = await response.json();

      if (response.ok) {
        setData(json);
        const allCategories = [
          "all",
          ...new Set(data.map((item) => item.category)),
        ];
        setCategories(allCategories);
      }
    };

    getRecipesList();
    //get all categories from data
  }, []);
}

想要根据数据数组填充类别数组
从数据库填充数据阵列

mwg9r5ms

mwg9r5ms1#

如果这是完整的代码,我认为还有几个问题。你需要定义类别和数据的状态,例如:const [data, setData] = useState();const [categories, setCategories] = useState();位于函数的顶部。
此外,您试图在setData(json)之后立即使用data.map。由于React调度状态更新的方式,数据在组件重新呈现之前不会有json内容。
我认为有两个解决办法。
1.更改allCategories,使数组来自json变量:

const allCategories = ['all', ...new Set(json.map(item => item.category))]


1.在dependency数组中创建一个useEffect,并在数据更改时仅更新categories状态:

useEffect(() => {
   if (data) {
     setCategories(['all', ...new Set(data.map(item => item.category))]);
   }
 }, [data])

相关问题