react+ts+antd实现全选/反选操作

时间:2025-01-03 22:46:00
  • import React, { useState } from 'react';
  • import { CardRowColCheckbox } from ‘antd’;
  • const { Meta } = Card;
  • interface Data {
  •   id: number;
  •   name: string;
  •   price: number;
  •   url: string;
  •   [name: string]: any;
  • }
  • // 测试数据
  • const data = [
  •   { id1name'test1'price10url'xxxxx' },
  •   { id2name'test2'price100url'xxxxx' },
  •   { id3name'test3'price1000url'xxxxx' },
  •   { id4name'test4'price108url'xxxxx' },
  •   { id5name'test5'price108url'xxxxx' },
  • ];
  • const GoodsCard = ({ goods, handleChange }) => (
  •   <Card
  •     hoverable
  •     cover={<img alt="example" src={} />}
  •     actions={[
  •       <Checkbox checked={} key={} onChange={e => handleChange(e, )}>
  •         复制商品
  •       </Checkbox>,
  •     ]}
  •   >
  •     <Meta
  •       description={(
  •         <div>
  •           {}
  •         </div>
  •       )}
  •     />
  •   </Card>
  • );
  • const GoodsList = () => {
  •   const [list, setList] = useState<Data[]>(data);
  •   const [checkedAll, setCheckedAll] = useState<boolean>(false);
  •   const handleCheckAll = (e) => {
  •     setCheckedAll(e.target.checked);
  •     if (e.target.checked) {
  •       setList(list.map(item => ({ ...item, checkedtrue })));
  •     } else {
  •       setList(list.map(item => ({ ...item, checkedfalse })));
  •     }
  •   };
  •   const handleCheckItem = (e, goodsId) => {
  •     const curList = list.map((item) => {
  •       if (item.id === goodsId) {
  •         return ({ ...item, checked: e.target.checked });
  •       }
  •       return ({ ...item });
  •     });
  •     if (curList.filter(item => item.checked).length === list.length) {
  •       setCheckedAll(true);
  •     } else {
  •       setCheckedAll(false);
  •     }
  •     setList(curList);
  •   };
  •   return (
  •     <Card
  •       title="商品列表”
  •       extra={<Checkbox checked={checkedAll} onChange={handleCheckAll}>全选</Checkbox>}
  •     >
  •       <Row gutter={16}>
  •         {
  •           (goods => (
  •             <Col span={4}>
  •               <GoodsCard goods={goods} handleChange={handleCheckItem} />
  •             </Col>
  •           ))
  •         }
  •       </Row>
  •     </Card>
  •   );
  • };
  • export default GoodsList;