Tell me please
Why the data passed through props does not change when it is changed in useLocation()
-
I have data transfer via Link
<Link to={{ pathname: '/catalog/product_card/' + product.id, state: { product } }}> <span className="product-name">{product.name}</span> </Link> -
I get them via useLocation in ProductCardView
const CategoryViewDesktop = ({productState}:any) => { const product = productState.product; console.log(product) return ( <div>{product.id}</div> ) } const ProductCardView = () => { const { state } = useLocation() const productState = {products: state.products, product: state.product} console.log(state.product) return ( <Page page="catalog.products"> <CategoryViewDesktop productState={productState} /> </Page> ) } -
In ProductCardView – data changes when interacting with Link, but the same data comes to ProductCardInfo
Why is this and how to fix it?
>Solution :
Because your variable productState is not reactive, you can use hook useState or use useLocation state directly on child component props .
const CategoryViewDesktop = ({productState}:any) => {
const product = productState.product;
console.log(product)
return (
<div>{product.id}</div>
)
}
const ProductCardView = () => {
const { state } = useLocation()
console.log(state.product)
return (
<Page page="catalog.products">
<CategoryViewDesktop productState={state} />
</Page>
)
}