我在控制台上收到了这个错误信息:"Each child in a list should have a unique "key" prop."

12 浏览
0 Comments

我在控制台上收到了这个错误信息:"Each child in a list should have a unique "key" prop."

在我的控制台中出现了这个错误,提示“列表中的每个子元素都应该有一个唯一的“key”属性”,我不明白如何解决它。

这是我在控制台中得到的错误图像链接。

这是我为产品组件编写的代码:

const Products = ({ cat, filters, sort }) => {
  const [products, setProducts] = useState([]);
  const [filteredProducts, setFilteredProducts] = useState([]);
  useEffect(() => {
    const getProducts = async () => {
      try {
        const res = await axios.get(
          cat
            ? `http://localhost:5000/api/products?category=${cat}`
            : "http://localhost:5000/api/products"
        );
        setProducts(res.data);
      } catch (err) {}
    };
    getProducts();
  }, [cat]);
  useEffect(() => {
    cat &&
      setFilteredProducts(
        products.filter((item) =>
          Object.entries(filters).every(([key, value]) =>
            item[key].includes(value)
          )
        )
      );
  }, [products, cat, filters]);
  useEffect(() => {
    if (sort === "newest") {
      setFilteredProducts((prev) =>
        [...prev].sort((a, b) => a.createdAt - b.createdAt)
      );
    } else if (sort === "asc") {
      setFilteredProducts((prev) =>
        [...prev].sort((a, b) => a.price - b.price)
      );
    } else {
      setFilteredProducts((prev) =>
        [...prev].sort((a, b) => b.price - a.price)
      );
    }
  }, [sort]);
  return (
    
      {cat
        ? filteredProducts.map((item) => )
        : products
            .slice(0, 8)
            .map((item) => )}
    
  );
};

这是我为产品组件编写的代码:

const Product = ({ item }) => {
    return (
      
        
        
        
          
            
          
          
            
            
            
          
          
            
          
        
      
    );
  };

我也不明白错误的来源。

0
0 Comments

这个错误的出现是因为在一个列表中的每个子元素都应该有一个唯一的"key"属性。如果没有为每个子元素提供一个唯一的键值,React就无法准确地跟踪每个元素的变化,从而引发这个错误。

要解决这个问题,你需要为每个列表中的子元素提供一个唯一的"key"属性。通常,你可以使用每个子元素的唯一标识符作为"key"属性的值。例如,如果你的子元素是一个包含id属性的对象,你可以将id作为"key"属性的值。

以下是一个示例代码,演示了如何为列表中的子元素提供一个唯一的"key"属性:

    {filteredProducts.map(product => (
  • {product.name}
  • ))}

在上面的代码中,我们使用了filteredProducts数组中每个产品的id作为"key"属性的值。

通过为列表中的每个子元素提供一个唯一的"key"属性,你就能够解决这个错误,并且React能够准确地跟踪每个元素的变化。这样,你就可以在列表中添加、删除或更新元素,而不会引发这个错误。

0