Loading...
Чат
Sniper5 мин назад
@AI_Helper, как подключить?


import { createContext, useContext, useReducer, useMemo, useCallback, memo } from "react";

const CartContext = createContext(null);

const cartReducer = (state, action) => {
switch (action.type) {
case "ADD_ITEM": {
const existing = state.items.find(i => i.id === action.payload.id);
if (existing) {
return {
...state,
items: state.items.map(i =>
i.id === action.payload.id? {...i, qty: i.qty + 1 } : i
)
};
}
return {...state, items: [...state.items, {...action.payload, qty: 1 }] };
}
case "REMOVE_ITEM":
return {...state, items: state.items.filter(i => i.id!== action.payload) };
case "UPDATE_QTY":
return {
...state,
items: state.items.map(i =>
i.id === action.payload.id? {...i, qty: action.payload.qty } : i
).filter(i => i.qty > 0)
};
case "REORDER_ITEMS":
return {...state, items: action.payload };
case "CLEAR_CART":
return {...state, items: [] };
default:
return state;
}
};

export const CartProvider = memo(({ children }) => {
const [state, dispatch] = useReducer(cartReducer, { items: [] });

const addItem = useCallback((item) => dispatch({ type: "ADD_ITEM", payload: item }), []);
const removeItem = useCallback((id) => dispatch({ type: "REMOVE_ITEM", payload: id }), []);
const updateQty = useCallback((id, qty) => dispatch({ type: "UPDATE_QTY", payload: { id, qty } }), []);
const reorderItems = useCallback((items) => dispatch({ type: "REORDER_ITEMS", payload: items }), []);
const clearCart = useCallback(() => dispatch({ type: "CLEAR_CART" }), []);

const totalPrice = useMemo(() =>
state.items.reduce((sum, i) => sum + i.price * i.qty, 0), [state.items]
);
const totalQty = useMemo(() =>
state.items.reduce((sum, i) => sum + i.qty, 0), [state.items]
);

const value = useMemo(() => ({
items: state.items,
totalPrice,
totalQty,
addItem,
removeItem,
updateQty,
reorderItems,
clearCart
}), [state.items, totalPrice, totalQty, addItem, removeItem, updateQty, reorderItems, clearCart]);

return <CartContext.Provider value={value}>{children}</CartContext.Provider>;
});

export const useCart = () => {
const ctx = useContext(CartContext);
if (!ctx) throw new Error("useCart must be used within CartProvider");
return ctx;
};
Sniper4 мин назад
ну бл*?
AI_Helper4 мин назад
@Sniper, Чтобы подключить этот контекст Carter в ваш React приложение, нужно выполнить несколько шагов:

1. Создайте файл с именем CartProvider.js или подобным.
2. Вставьте туда код, который вы привели.
3. Импортируйте CartProvider в главном файле вашего приложения (например, App.js ).
4. Оберните все компоненты, которые должны использовать контекст Carter, кодом <CartProvider> .

Пример:
plaintext
import React from 'react'; 
import { CartProvider } from './CartProvider';

function App() {
return (
<CartProvider>
{/ Вставьте здесь ваши другие компоненты /}
</CartProvider>
);
}

export default App;


Теперь все компоненты, использующие useCart , будут иметь доступ к состоянию корзины
Sniper1 мин назад
@AI_Helper, У меня от так

<CartProvider>
<App />
</CartProvider>
AI_Helperтолько что
@Sniper, Понял. Вам нужно подключить контекст CartContext к компоненту App. Для этого используйте <CartProvider> и передайте ему значение items из вашего состояния. Например:

plaintext
<CartProvider value={state.items}> 
<App />
</CartProvider>


Также не забудьте создать компонент CartProvider , который будет использовать функцию useReducer для управления состоянием.
Открыть чат →
Онлайн: 3
Время:
Gen. 0.1514
(c) Bym.Guru 2010-2026