antd table分页,antd table 组件中的 pagination 不受控

场景如下:

指定了 pagination 的 current 和 total 属性。

table 组件中有 2 页数据共 11 条、默认分页每页 10 条。

当第二页的数据只有一条时,删除了此数据,pagination 的当前页码自动变成了 1 而不是当前的 2 ,current 属性并没有起作用,另外pagination 的 onChange 事件也却并未触发。

class PaginationBug extends React.Component{

constructor(props){

super(props);

this.state = {

data: [],

columns : [{

title: 'id',

dataIndex: 'id',

}, {

title: 'name',

dataIndex: 'name',

}, {

title: 'age',

dataIndex: 'age',

},{

title: '操作',

key: 'operation',

render: (text, record, index) =>

onConfirm={() => {

console.log(record.id);

let data = this.state.data;

data.pop();

this.setState({

data: data

}, () => {

console.log(this.state.data.length);

console.log('after delete current page: ',this.state.current);

})

}}

>

删除

}],

current: 1,

}

}

componentWillMount(){ //初始化数据

let data = [];

for (let i = 0; i < 41; i++) {

data.push({

key: i,

id: i,

name: i,

age: i,

});

}

this.setState({

data: data

})

}

render(){

return (

pagination={{

total: this.state.data.length,

current: this.state.current,

onChange: (page, pageSize) => {

console.log('current page: ', page)

this.setState({

current: page

})

}

}}

bordered={true}

columns={this.state.columns}

dataSource={this.state.data}

rowKey={record => record.id}

/>

);

}

}

bVV4g7?w=1134&h=562

删除某页最后一条数据后,指定当前页码的 current 值并未改变, 但是显示的页码已经减了一。

bVV4ha?w=1206&h=732

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design 是一个非常流行的 UI 框架,它提供了很多实用的组件,包括 Table 表格组件。在 Vue 项目使用 Ant Design 的 Table 组件时,可以考虑封装一个通用的 Table 组件,方便在不同的页面复用。 下面是一个简单的 Ant Design Vue Table 封装: ```vue <template> <a-table :columns="columns" :dataSource="dataSource"> <a-pagination :total="total" :current="current" :pageSize="pageSize" @change="handlePageChange" /> </a-table> </template> <script> import { Table, Pagination } from 'ant-design-vue'; export default { name: 'AntdTable', components: { Table, Pagination }, props: { columns: { type: Array, required: true, }, dataSource: { type: Array, required: true, }, total: { type: Number, required: true, }, current: { type: Number, required: true, }, pageSize: { type: Number, required: true, }, }, methods: { handlePageChange(pageNumber) { this.$emit('page-change', pageNumber); }, }, }; </script> ``` 在这个组件,我们使用了 Ant Design Vue 提供的 TablePagination 组件组件接受了五个 props:columns、dataSource、total、current 和 pageSize,分别对应 Table 组件Pagination 组件的属性。在 handlePageChange 方法,我们触发了一个自定义事件 page-change,这个事件可以在父组件监听并处理分页请求。 使用这个组件时,只需要传入相应的 props 即可: ```vue <template> <div> <AntdTable :columns="columns" :dataSource="dataSource" :total="total" :current="current" :pageSize="pageSize" @page-change="handlePageChange" /> </div> </template> <script> import AntdTable from '@/components/AntdTable'; export default { components: { AntdTable }, data() { return { columns: [...], dataSource: [...], total: 100, current: 1, pageSize: 10, }; }, methods: { handlePageChange(pageNumber) { console.log('Page changed:', pageNumber); }, }, }; </script> ``` 这样,我们就完成了一个简单的 Ant Design Vue Table 封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值