я использую контекстные хуки для добавления элемента, но я не могу удалить элемент и застрял здесь и не знаю, как решить

#reactjs

#reactjs

Вопрос:

вот мой компонент продукта, где я определяю функцию удаления

Я не могу удалить элемент из списка продуктов. нужна помощь для решения этой проблемы. пожалуйста, помогите мне с этим. Спасибо.

 
    import React, { useContext } from "react";
    import { ContextProduct } from "./ContextProduct";
    
    function Product({ name, price }) {
      const [items, setItems] = useContext(ContextProduct);
      const removeProduct = (id) => {
        setItems(items.filter((item) => item.id !== id));
      };
      return (
        <div>
          <h3>{name}</h3>
          <p>{price}</p>
          <button onClick={() => removeProduct()}> delete</button>
        </div>
      );
    }
    
    export default Product;

  

и здесь ContextProvider

 
     import React, { createContext, useState } from "react";
    
    export const ContextProduct = createContext();
    
    const ProductProvider = (props) => {
      const [items, setItems] = useState([
        {
          name: "redmi note 9",
          price: "15000",
    
          id: 123,
        },
      ]);
      return (
        <ContextProduct.Provider value={[items, setItems]}>
          {props.children}
        </ContextProduct.Provider>
      );
    };
    
    export default ProductProvider;

  

введите код здесь и здесь список продуктов

 
    import React, { useContext, useState } from "react";
    import { ContextProduct } from "./ContextProduct";
    import Product from "./Product";
    
    function ProductList() {
      const [items, setItems] = useContext(ContextProduct);
    
      return (
        <div>
          {items.map((item) => (
            <Product name={item.name} price={item.price} key={item.id} />
          ))}
        </div>
      );
    }
    
    export default ProductList;

  

пожалуйста, помогите мне решить эту проблему, спасибо

Ответ №1:

Вы должны передать идентификатор вместе с ценой и именем, и в вашей функции вы должны передать его в качестве запрошенного аргумента.

   function Product({ name, price, id }) {
      const [items, setItems] = useContext(ContextProduct);
      const removeProduct = (id) => {
        setItems(items.filter((item) => item.id !== id));
      };
      return (
        <div>
          <h3>{name}</h3>
          <p>{price}</p>
          <button onClick={() => removeProduct(id)}> delete</button>
        </div>
      );
    }