Назад к вопросам
Middle
1
import React, { useMemo } from 'react'; import { Button, Table, Tag } from 'antd'; import { useAppDispatch, useAppSelector } from '../hooks/redux'; import { Product } from '../types'; import { deleteProduct } from '../store/productSlice'; const categoryColors: Record<string, string> = { Electronics: 'blue', Accessories: 'green', Tools: 'orange', }; export const ProductList: React.FC = () => { const allProducts = useAppSelector((state) => state.products.items); const products = useMemo(() => [...allProducts], [allProducts]); const dispatch = useAppDispatch(); const handleDelete = (id: string) => { dispatch(deleteProduct(id)); }; const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Sales', dataIndex: 'sales', key: 'sales', sorter: (a: Product, b: Product) => a.sales - b.sales, render: (v: number) => v.toLocaleString(), }, { title: 'Category', dataIndex: 'category', key: 'category', render: (category: string) => ( <Tag color={categoryColors[category]}>{category}</Tag> ), }, { title: 'Action', key: 'action', render: (_: any, record: Product) => ( <Button danger onClick={() => handleDelete(record.id)}> Delete </Button> ), }, ]; return <Table dataSource={products} columns={columns} rowKey="id" />; };
Компании, где спрашивали
Ifellow
Ответ от нейросети
sobes.tech AI
В данном React-компоненте ProductList реализован список продуктов с возможностью сортировки и удаления.
Основные моменты:
- Используется
useAppSelectorдля получения списка продуктов из Redux-хранилища. useMemoприменяется для мемоизации копии массива продуктов, чтобы избежать лишних рендеров.- Колонки таблицы определены с помощью массива
columns, где:NameиCategoryотображают название и категорию продукта.Salesсортируются по числовому значению и форматируются с разделителями.Categoryотображается с цветным тегом, цвет зависит от категории.- В колонке
Actionесть кнопка удаления, которая вызываетhandleDeleteи диспатчит экшен удаления из Redux.
Пример использования useMemo здесь оправдан, если список продуктов часто обновляется, чтобы не создавать новый массив без необходимости.
Код хорошо структурирован и использует возможности библиотеки Ant Design для удобного отображения таблицы с интерактивными элементами.