/
lizardking
/
react_final
Обзор
Документация
Войти
/
lizardking
/
react_final
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/features/cart/ui/AddToCartButton/AddToCartButton.tsx
41 строка
1 KB
LizardKing
Рефакторинг на FSD
24 ноя 2025, 16:05
24 ноя 2025, 16:05
eedf5c5
Код
Авторство
О чём код?
import type { Product } from 'entities/product' import { memo, startTransition, useActionState } from 'react' import { PrimaryButton } from 'shared/ui/PrimaryButton' import { useAddToCart } from '../../hooks/useAddToCart' type AddToCartButtonProps = { product: Product } function AddToCartButtonComponent({ product }: AddToCartButtonProps) { const { addProductToCart } = useAddToCart() const [, addToCartAction, isAddToCartPending] = useActionState( async (previousState: null, _payload: unknown) => { await new Promise(resolve => setTimeout(resolve, 500)) addProductToCart({ ...product, count: 1 }) return previousState }, null, ) const handleAddToCartClick = () => { startTransition(() => { void addToCartAction({}) }) } return ( <PrimaryButton onClick={handleAddToCartClick} disabled={isAddToCartPending}> {isAddToCartPending ? 'Добавляем…' : 'В корзину'} </PrimaryButton> ) } export const AddToCartButton = memo( AddToCartButtonComponent, (previousProps, nextProps) => previousProps.product.id === nextProps.product.id, ) AddToCartButton.displayName = 'AddToCartButton'