antd pro
的表格进行分页多选id
, 而是需要返回 id/name/link
简单查阅 ant design pro
的文档后,可以发现他是有一个多选的属性 rowSelection
所以我们就先用这个进行实验
// ProTable
rowSelection={{
// 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
defaultSelectedRowKeys: [1],
}}
经过上面的一个代码, 你会发现, 其实整体的效果已经完成了一半了, 因为antd Pro
其实已经封装好了一个分页多选, 但是他只能返回 [1,2,,3,,4]
这样子的数据结构, 目前和我们想要的数据结构不一样, 所以还需要改造
思路 :
onChange
或者 onSelect
这类的操作函数最后我找寻到的 api
如下
onSelect - 单行选择
onSelectMultiple - 多行选择(使用shift键可以触发多选)
onSelectAll - 全选全不选
onChange - 每次选择行都会触发onChange,并且是后执行。
那这个时候我们就需要想一下跨页选择的逻辑了, 因为按照他目前给的 api
我们就只能重构他的返回数据了, 例如说我目前想的一个逻辑
cancelRowKeys
取消选中的变量
selectedRowKeys
选中的数据的变量
onSelect
判断一下当前选择的是取消/还是选择 , 然后用一个变量cancelRowKeys
进行接受onChange
中进行数据的处理cancelRowKeys
有值则从已经选中的selectedRowKeys
中清除掉当前的cancelRowKeys
, 并且清空cancelRowKeys
cancelRowKeys
没有值则把数据添加到selectedRowKeys
中,并且清除重复的数据 const [drawerSelectGoods, setDrawerSelectGoods] = useState([]) // 选择的商品
let cancelRowKeys = [] // 取消选择的项目
const formatList = list => {
return list.map(item => {
const commonProps = {
name: item.goods_name,
id: item.id,
type: 'product'
}
if (list.length === 1) {
return {
...commonProps,
link: `/pages/index/goodsDetails/goodsDetails?id=${item.id}`,
display_category_list: false
}
} else {
return {
...commonProps,
link: `/pages/category/categoryList/categoryList`,
display_category_list: true
}
}
})
}
<ProTable
rowSelection={{
selectedRowKeys: drawerSelectGoods.map(i => i.id), // 回显需要
onChange: (keys, rows) => {
let tempList = [...rows, ...drawerSelectGoods.filter(i => !keys.includes(i.id))]
if (cancelRowKeys.length) {
setDrawerSelectGoods(formatList(tempList.filter(i => !cancelRowKeys.includes(i.id))))
} else {
setDrawerSelectGoods(formatList(tempList))
}
},
onSelect: (record, selected) => {
if (!selected) {
cancelRowKeys = [record.id]
}
}
}}
/>
// 选择分类 / 商品 处理
const handleCascaderChange = async (e, type) => {
let event
if (type === 'open') {
event = e[0]
} else if (type === 'edit') {
event = e[0].type
}
if (event === 'product') {
triggerGoodsDrawer()
if (value && value.length) {
setDrawerSelectGoods(value)
}
}
}
回显在我这里就是比较简单的了, 就是直接获取到数据之后, 进行赋值即可
🐤我非常乐意听取您的疑问和想法,欢迎在评论区留言
🐰您的每一条评论对我都至关重要,我会尽快回复
🎈如果这篇文章对您有所启发或帮助,欢迎赞赏、收藏或分享
🎁您的每一个动作都是对我创作的最大鼓励和支持
👍感谢您的阅读和陪伴,希望我的文章能给您带来一些帮助
🍻感谢您的支持,我会继续努力创作更多有价值的内容!
这篇文章的内容就介绍到这里,期待我们下次的相遇。感谢您花时间阅读,如果有任何问题或想法,欢迎在评论区留言。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。