【发布时间】:2022-10-08 18:16:28
【问题描述】:
我正在开发一个购物车功能的迷你项目,我正在创建一个自定义挂钩
useCart
这将包含我的购物车功能(添加到购物车等),以及用于存储购物车对象的状态 [cart, setCart]。
我的自定义挂钩位于 /Hook 文件夹中,我的产品位于 /Component/Product 文件夹中
我想在我的Product.js 组件中使用此状态,但是,当我尝试使用它时,它告诉我购物车未定义(我尝试传递一个简单的字符串并且它有效,所以我认为这不是相对路径问题)
我是初学者,所以我想知道,我的架构有问题吗?如何将此状态传递给Product.js 并更新它?
我阅读了有关上下文 API 的信息,但我不确定语法以及它是否适合这里...
多谢你们。
这里是Product.js 和useCart.js:
产品 :
import React, {useState, useEffect} from 'react'
import useCart from '../../Hooks/useCart';
import Data from '../../local-json/products';
export default function Product() {
const [products, setProducts] = useState();
const {cart, setCart, addItem, removeItem} = useCart();
useEffect(()=>{
setProducts(Data);
}, []);
console.log(addItem);
return (
<>
<article className="product-single">
<h1>Fire sale !</h1>
{
Data.map(el =>{
return(
<h2>{el.productName}</h2>
)
})
}
<button>Add</button>
</article>
</>
)
}
使用购物车:
import React, {useState, useEffect, useContext} from 'react'
export default function useCart() {
const [cart, setCart] = useState(); /* Here we store the product object */
const addItem = (productObj) =>{
setCart([...cart, productObj]);
} /* Add to cart function */
const removeItem = (productObj) => {
setCart(cart.filter(
item => {
return item !== productObj;
}
))
} /* Remove from cart function */
const quantitiyAdd = () => {
} /* Add one item function */
const quantityRemove = () => {
} /* Remove one item function */
return {cart, setCart, addItem, removeItem};
}
【问题讨论】:
-
您能否以代码格式而不是图像发布代码。以这种方式帮助您要容易得多
-
购物车是一组对象吗?
标签: javascript reactjs react-hooks state