Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A bevásárlókosár minden e-kereskedelmi webhely elengedhetetlen része. Lehetővé teszi az ügyfelek számára a termékek tárolását és vásárlását.

A Next.js e-kereskedelmi alkalmazásban a Context API és a useReducer hook segítségével hozhat létre kosarat. A kontextus API leegyszerűsíti a kosáradatok megosztását az összetevők között, míg a useReducer kezeli a kosár állapotát.

A termékoldal létrehozása

Az oldalak mappában hozzon létre egy új Product.jsx fájlt, amely egyetlen terméket jelenít meg.

exportalapértelmezettfunkcióTermék({azonosító, név, ár}) {
Visszatérés (

{név}</p>

{ár}</p>

A termékkomponens elfogadja a termék azonosítóját, nevét és árát, és megjeleníti azt. Van rajta egy „Kosárba helyezés” gomb is.

Ha a terméket már a kosárba helyezték, akkor a gombnak át kell váltania a „Kivétel a kosárból” gombra, és ha a termék nincs a kosárban, akkor az oldalon jelenjen meg a „Kosárba” gomb.

Ennek a funkciónak a megvalósításához nyomon kell követnie a kosárban lévő tételeket a kontextus API használatával és a useReducer horog.

Bevásárlókosár létrehozása a Context API használatával

A kontextus API lehetővé teszi az adatok megosztását a különböző összetevők között anélkül, hogy a kellékeket manuálisan át kellene adnia szülőről gyermekre. Ezek az összetevők lehetnek a navigációs sáv, a termék részleteit tartalmazó oldal vagy a fizetési oldal.

Hozzon létre egy cartContext.js nevű új fájlt a Context nevű mappában, és hozza létre a környezetet.

import { CreateContext } tól től"reagál";

exportconst CartContext = createContext({
tételek: [],
});

A CartContext egy tételtömböt vesz alapértelmezett értékként.

Ezután hozza létre a kontextusszolgáltatót. A kontextusszolgáltató lehetővé teszi a kontextust fogyasztó összetevőknek, hogy előfizessenek a kontextusváltozásokra.

A cartProvider nevű új függvényben adja hozzá a következőket:

exportconst CartProvider = ({gyerekek }) => {
Visszatérés<CartContext. Szolgáltató>{gyermekek}CartContext. Szolgáltató>;
};

A kosárban lévő tételek nyomon követéséhez használja a useReducer horgot.

A useReducer hook úgy működik, mint a useState hook, azzal a különbséggel, hogy segít a bonyolultabb állapotlogika kezelésében. Elfogadja a redukciós funkciót és a kezdeti állapotot. Visszaadja az aktuális állapotot és egy diszpécser függvényt, amely egy műveletet továbbít a reduktor funkciónak.

Hozzon létre egy új CartReducer nevű függvényt, és adja hozzá a szűkítőt.

const cartReducer = (állapot, cselekvés) => {
const {típus, hasznos teher} = művelet;

kapcsoló (típus) {
ügy"ADD":
Visszatérés {
...állapot,
tételek: payload.items,
};

ügy"REMOVE":
Visszatérés {
...állapot,
tételek: payload.items,
};

alapértelmezett:
dobásújHiba("Ennek a típusnak nincs esete");
}
};

A reduktor funkció egy kapcsoló utasítást tartalmaz, amely a művelet típusától függően frissíti az állapotot. A kosárcsökkentő funkció „ADD” és „REMOVE” műveletekkel rendelkezik, amelyek a kosárhoz adják, illetve a kosárból kivehetők.

A reduktor funkció létrehozása után használja a useReducer horogban. Kezdje a CartProvider funkció létrehozásával. Ez az a funkció, amely kontextust biztosít a többi összetevő számára.

exportconst CartProvider = ({gyermekek}) => {
Visszatérés<CartContext. Szolgáltató>{gyermekek}CartContext. Szolgáltató>;
}

Ezután hozza létre a useReducer hookot.

exportconst CartProvider = ({gyerekek }) => {
const [állapot, feladás] = useReducer (cartReducer, { tételeket: [] });
Visszatérés<CartContext. Szolgáltató>{gyermekek}CartContext. Szolgáltató>;
};

A diszpécser funkció felelős a kosár állapotának frissítéséért, ezért módosítsa a CartProvider funkciót, hogy olyan funkciókat is tartalmazzon, amelyek a kosár frissítésekor termékeket küldenek a useReducer hookba.

import { CreateContext, useReducer } tól től"reagál";

exportconst CartProvider = ({gyerekek }) => {
const [állapot, feladás] = useReducer (cartReducer, kezdeti állapot);

const addToCart = (termék) => {
const updatedCart = [...state.items, product];

Elküldés({
típus: "ADD",
hasznos teher: {
tételek: frissített kosár,
},
});
};

const RemoveFromCart = (id) => {
const updatedCart = state.items.filter(
(currentProduct) => currentProduct.id !== id
);

Elküldés({
típus: "REMOVE",
hasznos teher: {
tételek: frissített kosár,
},
});
};

Visszatérés<CartContext. Szolgáltató>{gyermekek}CartContext. Szolgáltató>;
};

Az addToCart függvény hozzáfűzi az új terméket a meglévő termékekhez, és visszaadja a frissített termékeket a feladási függvény rakomány objektumában. Hasonlóképpen, az removeFromCart függvény azonosító alapján kiszűri a tételt, és visszaadja a frissített listát.

A CartContext szolgáltatóban is vissza kell adnia az értékprofilt.

exportconst CartProvider = ({gyerekek }) => {
const [állapot, feladás] = useReducer (cartReducer, {
tételek: [],
});

const addToCart = (termék) => {};
const RemoveFromCart = (id) => {};

const érték = {
tételek: state.items,
kosárba,
távolítsa el a kosárból,
};

Visszatérés<CartContext. Szolgáltatóérték={érték}>{gyermekek}CartContext. Szolgáltató>;
}

Az értéktámasz a useContext hook segítségével kerül felhasználásra.

A kosár kontextusának fogyasztása

Eddig létrehozta a kosárkörnyezetet, és létrehozott egy useReducer függvényt, amely frissíti a kosarat. Ezután a useContext hook segítségével felhasználhatja a kosár kontextusát a termékkomponensben.

Kezdje azzal, hogy az index.js-t, a legfelső összetevőt csomagolja a kontextusszolgáltatóval, hogy a környezeti értékek elérhetők legyenek az egész alkalmazásban.

import { Kosárszolgáltató } tól től"../context/cartContext";

funkcióMyApp({ Component, pageProps }) {
Visszatérés (


</CartProvider>
);
}

exportalapértelmezett MyApp;

Ezután importálja a useContext hook-ot és a kosárkörnyezet-szolgáltatót a Product.js fájlba

import { useContext } tól től"reagál"
import { KosárContext } tól től"../context/cartContext"

exportalapértelmezettfunkcióTermék() {
const {items, addToCart, removeFromCart} = useContext (CartContext)

Visszatérés (
<>


{név}</p>

{ár}</p>

A gomb funkciója attól függ, hogy az áru már a kosárban van-e. Ha egy termék van a kosárban, akkor a gombbal távolítsa el azt a kosárból, és ha egy termék még nincs a kosárban, akkor adja hozzá. Ez azt jelenti, hogy nyomon kell követnie az elem állapotát a useEffect és a useState segítségével. A useEffect kód ellenőrzi, hogy az elem a kosárban van-e az összetevő megjelenítése után, miközben a useState frissíti a tétel állapotát.

const [exists, setExists] = useState(hamis);

useEffect(() => {
const inCart = items.find((tétel) => item.id id);

ha (inCart) {
setExists(igaz);
} más {
setExists(hamis);
}
}, [elemek, azonosító]);

Most, feltételes renderelést használjon hogy a gomb a létező állapot alapján jelenjen meg.

Visszatérés (

{név}</p>

{ár}</p>
{
létezik
? <gombkattintásra={() => RemoveFromCart (id)}> Eltávolítás a kosárbólgomb>
: <gombkattintásra={() => addToCart({azonosító, név, ár})}> Kosárba helyezésgomb>
}
</div>
)

Vegye figyelembe, hogy az onClick kezelő függvényei a kontextusszolgáltatóban meghatározott removeFromCart és addToCart függvények.

További funkciók hozzáadása a kosárhoz

Megtanulta, hogyan hozhat létre bevásárlókosarat a kontextus API és a useReducer hook használatával.

Bár ez az útmutató csak a hozzáadási és eltávolítási funkciókra vonatkozik, ugyanazokat a fogalmakat használhatja további funkciók hozzáadásához, például a kosár tételeinek mennyiségének módosításához. A kulcsfontosságú a kontextus API megértése, és a kosár részleteinek frissítéséhez használt horgok használata.