#yyds干货盘点# ant design中 table的表格行的拖拽实现
Posted 前端歌谣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# ant design中 table的表格行的拖拽实现相关的知识,希望对你有一定的参考价值。
最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 微信公众号关注小歌谣
前言
首先刚开始知道要书写一个这样的功能我的内心是比较崩溃的 完全没有思路
然后就打开官网的文档进行观看
开始
一开始准备写 打开官网的一个文档是4.0的 看起来也是一脸的蒙蔽
接着找到3的一个文档
重点
直接说说如何让实现当前这个功能上代码
代码部分
import Table from antd;
import DndProvider, DragSource, DropTarget from react-dnd;
import html5Backend from react-dnd-html5-backend;
import update from immutability-helper;
let dragingIndex = -1;
class BodyRow extends React.Component
render()
const isOver, connectDragSource, connectDropTarget, moveRow, ...restProps
= this.props;
const style = ...restProps.style, cursor: move ;
let className = restProps;
if (isOver)
if (restProps.index > dragingIndex)
className += drop-over-downward;
if (restProps.index < dragingIndex)
className += drop-over-upward;
return connectDragSource(
connectDropTarget(<tr ...restProps className=className style=style />),
);
const rowSource =
beginDrag(props)
dragingIndex = props.index;
return
index: props.index,
;
,
;
const rowTarget =
drop(props, monitor)
const dragIndex = monitor.getItem().index;
const hoverIndex = props.index;
// Dont replace items with themselves
if (dragIndex === hoverIndex)
return;
// Time to actually perform the action
props.moveRow(dragIndex, hoverIndex);
// Note: were mutating the monitor item here!
// Generally its better to avoid mutations,
// but its good here for the sake of performance
// to avoid expensive index searches.
monitor.getItem().index = hoverIndex;
,
;
const DragableBodyRow = DropTarget(row, rowTarget, (connect, monitor) => (
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver(),
))(
DragSource(row, rowSource, connect => (
connectDragSource: connect.dragSource(),
))(BodyRow),
);
const columns = [
title: Name,
dataIndex: name,
key: name,
,
title: Age,
dataIndex: age,
key: age,
,
title: Address,
dataIndex: address,
key: address,
,
];
class DragSortingTable extends React.Component
state =
data: [
key: 1,
name: John Brown,
age: 32,
address: New York No. 1 Lake Park,
,
key: 2,
name: Jim Green,
age: 42,
address: London No. 1 Lake Park,
,
key: 3,
name: Joe Black,
age: 32,
address: Sidney No. 1 Lake Park,
,
],
;
components =
body:
row: DragableBodyRow,
,
;
moveRow = (dragIndex, hoverIndex) =>
const data = this.state;
const dragRow = data[dragIndex];
this.setState(
update(this.state,
data:
$splice: [[dragIndex, 1], [hoverIndex, 0, dragRow]],
,
),
);
;
render()
return (
<DndProvider backend=HTML5Backend>
<Table
columns=columns
dataSource=this.state.data
components=this.components
onRow=(record, index) => (
index,
moveRow: this.moveRow,
)
/>
</DndProvider>
);
ReactDOM.render(<DragSortingTable />, mountNode);
#components-table-demo-drag-sorting tr.drop-over-downward td
border-bottom: 2px dashed #1890ff;
#components-table-demo-drag-sorting tr.drop-over-upward td
border-top: 2px dashed #1890ff;
这是官网的示例 那么我们如何实现呢
第一步 引入第一个类
第二步 找准数据
第三步 进行数据的一个赋值我这边是dva.js赋值
第四步 回调或者确定按钮处理数据(这边是确定按钮处理值然后调接口)
总结
这样的话 表格行就可以进行拖拽操作了
以上是关于#yyds干货盘点# ant design中 table的表格行的拖拽实现的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点 React工作记录二十二ant design实现嵌套table
#yyds干货盘点 React工作记录十一控制ant design中form的必填项判断
#yyds干货盘点 React工作记录二十一ant design封装一个弹框组件
#yyds干货盘点#Spring专题「技术原理」为大家介绍一下Spring中的Ant路径匹配工具组件AntPathMatcher