Skip to content

Commit 35914ea

Browse files
committed
fix: support react dnd 16 demo
1 parent bbf0019 commit 35914ea

1 file changed

Lines changed: 21 additions & 39 deletions

File tree

docs/examples/renderTabBar-dragable.tsx

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,34 @@
11
import React from 'react';
2-
import { DndProvider, DragSource, DropTarget } from 'react-dnd';
3-
import HTML5Backend from 'react-dnd-html5-backend';
2+
import { DndProvider, useDrag, useDrop } from 'react-dnd';
3+
import { HTML5Backend } from 'react-dnd-html5-backend';
44
import Tabs from '@rc-component/tabs';
55
import type { TabsProps } from '@rc-component/tabs';
66
import '../../assets/index.less';
77

88
// Drag & Drop node
9-
class TabNode extends React.Component<any, any> {
10-
render() {
11-
const { connectDragSource, connectDropTarget, children } = this.props;
12-
13-
return connectDragSource(connectDropTarget(children));
14-
}
15-
}
16-
17-
const cardTarget = {
18-
drop(props, monitor) {
19-
const dragKey = monitor.getItem().index;
20-
const hoverKey = props.index;
21-
22-
if (dragKey === hoverKey) {
23-
return;
24-
}
9+
const WrapTabNode: React.FC<any> = ({ children, index, moveTabNode }) => {
10+
const [, drop] = useDrop({
11+
accept: 'DND_NODE',
12+
drop(item: { index: React.Key }) {
13+
const dragKey = item.index;
14+
const hoverKey = index;
15+
16+
if (dragKey === hoverKey) {
17+
return;
18+
}
2519

26-
props.moveTabNode(dragKey, hoverKey);
27-
monitor.getItem().index = hoverKey;
28-
},
29-
};
20+
moveTabNode(dragKey, hoverKey);
21+
item.index = hoverKey;
22+
},
23+
});
24+
const [, drag] = useDrag({
25+
type: 'DND_NODE',
26+
item: { index },
27+
});
3028

31-
const cardSource = {
32-
beginDrag(props) {
33-
return {
34-
id: props.id,
35-
index: props.index,
36-
};
37-
},
29+
return drag(drop(children));
3830
};
3931

40-
const WrapTabNode = DropTarget('DND_NODE', cardTarget, connect => ({
41-
connectDropTarget: connect.dropTarget(),
42-
}))(
43-
DragSource('DND_NODE', cardSource, (connect, monitor) => ({
44-
connectDragSource: connect.dragSource(),
45-
isDragging: monitor.isDragging(),
46-
}))(TabNode),
47-
);
48-
4932
class DraggableTabs extends React.Component<TabsProps> {
5033
state = {
5134
order: [],
@@ -111,7 +94,6 @@ class DraggableTabs extends React.Component<TabsProps> {
11194
});
11295

11396
return (
114-
// @ts-ignore https://github.com/react-dnd/react-dnd/issues/3636 需要升级 15.0.0 类型支持 children 但是写法需要重新调整验证
11597
<DndProvider backend={HTML5Backend}>
11698
<Tabs renderTabBar={this.renderTabBar} {...this.props} items={orderTabs} />
11799
</DndProvider>

0 commit comments

Comments
 (0)