@Xarviel: Chyba się zaciąłem, co prawda zrobiłem context ze stanem ilości produktów, zaimportowałem context w App to za bardzo nie ogarniam jeszcze jak to powiązać z moją wartością countera w StoreItem. Tak aby rzeczywiście klkniecie przycisku dodaj do koszyka zmieniała cyfrę przy koszyku w navbarze...
Napiszę Ci kod dotyczący samego contextu, pomijając pozostałe fragmenty, które już masz do tej pory
https://github.com/goldipl/React_Shop_App/blob/master/src/context/ShopContextProvider.tsx
Jak dobrze rozumiem, ta zmienna productsQuantity
jest to licznik wszystkich produktów jakie użytkownik wybierze do swojego koszyka?
Wybiera przykładowo 2 mleka, płatki kukurydziane, chleb, ryż, mięso, czyli 6 rzeczy i licznik ma wskazywać te 6 rzeczy, które wybrał.
Bo jakbyś chciał rozróżnić dokładnie co kupił itd z podziałem jak na paragonie to sama wartość prymitywna się nie nadaje i musiałby być przykładowo obiekt
const [productsQuantity, setProductsQuantity] = useState({});
/*
setProductsQuantity({
"milk": 2,
"meat": 1,
"rice": 1,
"cornflakes": 1,
"bread", 1
});
*/
ale załóżmy, że jest to nadal liczba tak jak u Ciebie i nic tutaj nie zmieniamy
https://github.com/goldipl/React_Shop_App/blob/master/src/components/Navbar.tsx
Samo wyświetlenie jest dość proste, wystarczy zaimportować context i użyć hooka useContext
do pobrania wartości
import { useContext } from 'react';
import { ShopContext } from '../context/ShopContextProvider';
const ResponsiveAppBar = () => {
= () => {
const { productsQuantity } = useContext(ShopContext);
return (
<>
Ilość produktów: {productsQuantity}
</>
);
}
https://github.com/goldipl/React_Shop_App/blob/master/src/components/StoreItem.tsx
Tutaj musisz podmienić swój stan counter
, na ten pochodzący z contextu, czyli productsQuantity
import { useContext } from 'react';
import { ShopContext } from '../context/ShopContextProvider';
const StoreItem = () => {
const { productsQuantity, setProductsQuantity } = useContext(ShopContext);
const counterUp = () => {
setProductsQuantity(productsQuantity + 1);
};
const counterDown = () => {
setCounter(Math.max(productsQuantity - 1, 0));
};
return (
<>
<button onClick={counterDown}>
-
</button>
<button onClick={counterUp}>
+
</button>
</>
);
};