Sobes.tech
Назад к вопросам
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 для удобного отображения таблицы с интерактивными элементами.