useDispatch 渲染不变的孩子
useDispatch render unchanged childern
这是一个功能组件,带有一个挂钩到 Redux 商店以获取产品。此外,我定义了 removeFromCart
挂钩以从产品列表中删除一个项目。
const ProductListHooks = () => {
const products = useSelector( state => state.productsModule.products);
const removeFromCart = useDispatch({ type:actions.REMOVE_FROM_CART});
return (
<>
{products.map(product => {
return (
<ProductItem
product={product}
key={product.id}
removeFromCart={removeFromCart}
/>
);
})}
</>
);
};
问题: 当我调用 removeFromCart
时,它删除了该项目,但 re-render 列表中的所有其他项目。我该如何解决?
可能不漂亮,但你可以记住每个项目:
const ProductItem = function memo({ product, removeFromCart }) {
return useMemo(() =>
<Item product={product} removeFromCart={removeFromCart} />
, [product]);
}
这是一个功能组件,带有一个挂钩到 Redux 商店以获取产品。此外,我定义了 removeFromCart
挂钩以从产品列表中删除一个项目。
const ProductListHooks = () => {
const products = useSelector( state => state.productsModule.products);
const removeFromCart = useDispatch({ type:actions.REMOVE_FROM_CART});
return (
<>
{products.map(product => {
return (
<ProductItem
product={product}
key={product.id}
removeFromCart={removeFromCart}
/>
);
})}
</>
);
};
问题: 当我调用 removeFromCart
时,它删除了该项目,但 re-render 列表中的所有其他项目。我该如何解决?
可能不漂亮,但你可以记住每个项目:
const ProductItem = function memo({ product, removeFromCart }) {
return useMemo(() =>
<Item product={product} removeFromCart={removeFromCart} />
, [product]);
}