hook,react+antd、表格Table +分页器pagination 使用注意事项

 <Table columns={columns} bordered dataSource={dataSource} rowKey={record => record.id}
 pagination={paginationProps} />

pagination分页器

  • 多使用默认值的pageSize和pageNo

1.注意设置分页默认值

const [pageOption, setPageOption] = useState({
    pageNo: 1,
    pageSize: 10
  })

1.1分页配置
1.2.分页器需要设置默认每页多少条pageSize

// 分页配置
  const paginationProps = {
    showQuickJumper: true,
    showTotal: () => `共${total}条`,
    total: total,
    current: pageOption.pageNo,
    pageSize: pageOption.pageSize,
    onChange: (current, size) => paginationChange(current, size)
  }

3.切换分页

  // 当前页面切换
  const paginationChange = async (current, size) => {
    console.log('page', current, size)
    setPageOption({
      pageNo: current,
      pageSize: size
    })
  }

4.删除时第二页只有一条数据,跳到第一页

  const columns = [
    {
      title: '操作',
      key: 'action',
      width: 100,
      align: 'center',
      render: (text, record) => (
        <Delete handelDet={(record) => { handelDet(record.id) }} centText='是否删除班级?' record={record} />
      ),
    },
  ];
//删除学生
  const handelDet = (record) => {
    classDel(record).then(({ code, data }) => {
      if (!code) {
      //添加成功
        message.success(data.message)
        //判定当前页只有一条数据时,跳到第一页
        if (dataSource.length === 1) {
          setPageOption({
            pageNo: 1,
            pageSize: 10
          })
          //改变分页
          paginationChange(1, 10)
        } else {
          getDataList()
        }
      }
    })
  }

5.查询时切换到第一页,分页器要跟着改变,
6.关闭弹框分页改变

  useEffect(() => {
    return () => {
      setPageOption({
        pageNo: 1,
        pageSize: 10
      })
    }
  }, [quserData])

7.序号排序

  {
      title: '序号',
      dataIndex: 'id',
      key: 'id',
      align: 'center',
      width: 100,
      render(text, record, index) {
        return (
          <span>{(pageOption.pageNo - 1) * 10 + index + 1}</span>
        )
      }
    },

8.动态表格序号
{(pageOption.pageNo - 1) * 10 + pageOption.pageSize+ 1}

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的可编辑表格的示例代码,使用React HookAntd组件库: ```javascript import React, { useState } from 'react'; import { Table, Input, InputNumber, Popconfirm, Form } from 'antd'; const EditableCell = ({ editing, dataIndex, title, inputType, record, index, children, ...restProps }) => { const inputNode = inputType === 'number' ? <InputNumber /> : <Input />; return ( <td {...restProps}> {editing ? ( <Form.Item name={dataIndex} style={{ margin: 0 }} rules={[ { required: true, message: `Please Input ${title}!`, }, ]} > {inputNode} </Form.Item> ) : ( children )} </td> ); }; const EditableTable = () => { const [form] = Form.useForm(); const [data, setData] = useState([ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Joe Black', age: 42, address: 'London No. 1 Lake Park', }, { key: '3', name: 'Jim Green', age: 32, address: 'Sidney No. 1 Lake Park', }, { key: '4', name: 'Jim Red', age: 32, address: 'London No. 2 Lake Park', }, ]); const [editingKey, setEditingKey] = useState(''); const isEditing = (record) => record.key === editingKey; const edit = (record) => { form.setFieldsValue({ name: '', age: '', address: '', ...record, }); setEditingKey(record.key); }; const cancel = () => { setEditingKey(''); }; const save = async (key) => { try { const row = await form.validateFields(); const newData = [...data]; const index = newData.findIndex((item) => key === item.key); if (index > -1) { const item = newData[index]; newData.splice(index, 1, { ...item, ...row }); setData(newData); setEditingKey(''); } else { newData.push(row); setData(newData); setEditingKey(''); } } catch (errInfo) { console.log('Validate Failed:', errInfo); } }; const columns = [ { title: 'Name', dataIndex: 'name', width: '25%', editable: true, }, { title: 'Age', dataIndex: 'age', width: '15%', editable: true, }, { title: 'Address', dataIndex: 'address', width: '40%', editable: true, }, { title: 'Action', dataIndex: 'action', render: (_, record) => { const editable = isEditing(record); return editable ? ( <span> <a href="javascript:;" onClick={() => save(record.key)} style={{ marginRight: 8 }} > Save </a> <Popconfirm title="Sure to cancel?" onConfirm={cancel}> <a>Cancel</a> </Popconfirm> </span> ) : ( <a disabled={editingKey !== ''} onClick={() => edit(record)}> Edit </a> ); }, }, ]; const mergedColumns = columns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, inputType: col.dataIndex === 'age' ? 'number' : 'text', dataIndex: col.dataIndex, title: col.title, editing: isEditing(record), }), }; }); return ( <Form form={form} component={false}> <Table components={{ body: { cell: EditableCell, }, }} bordered dataSource={data} columns={mergedColumns} rowClassName="editable-row" pagination={{ onChange: cancel, }} /> </Form> ); }; export default EditableTable; ``` 这个表格组件的主要思路是: 1. 使用`useState` Hook来保存表格数据和当前正在编辑的行的key。 2. 创建一个可编辑的单元格组件`EditableCell`,根据`editing`属性来展示编辑状态或者展示状态。当编辑状态时,渲染一个`antd`的`Form.Item`,提供一个可编辑的输入框。 3. 创建一个可编辑的表格组件`EditableTable`,渲染一个`antd`的`Table`组件。 4. 在表格的每一列中添加一个`editable`属性,表示该列是否可编辑。对于可编辑的列,使用`onCell`属性指定可编辑单元格的属性。 5. 在渲染表格的每一行时,根据当前行是否处于编辑状态来决定展示编辑状态还是展示状态。如果处于编辑状态,则渲染可编辑的单元格,否则渲染非可编辑的单元格。 6. 在表格中添加编辑和保存按钮,点击编辑按钮时进入编辑状态,点击保存按钮时保存修改。同时,保存和取消操作会将当前行的编辑状态取消。 这样,我们就完成了一个简单的可编辑表格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值