- 后端
- HTML5
Made with ❤️ by 紫升
npm install --save react-dndnpm install --save react-dnd-html5-backend
有关示例,请参阅测试教程。
指定容器节点作为 dragPreview,但只将拖动句柄设置为 dragSource()。
默认情况下,您无法限制拖动预览的移动,因为拖动预览是由浏览器绘制的。不过,您可以使用自定义拖动图层
,在该图层中,您可以自由渲染任何内容,也可以使用任何捕捉或限制。
useDrag 和 useDrop 都可以接受一个类型参数。这可以根据您的道具值进行更改,类似于 useMemo() React 内置钩子的工作方式。
useDrag 和 useDrop 返回的函数都可以在节点的 ref 函数中连锁使用。例如
const [, drag] = useDrag(...args);const [, drop] = useDrop(...args);return <div ref={(node) => drag(drop(node))}></div>;
如果使用的是 HTML5 后端,则可以为其导出的 NativeType 之一注册下拉目标:
export const TargetBox = ({ onDrop }) => {const [, drop] = useDrop(() => ({accept: [NativeTypes.FILE],drop(item) {if (onDrop) {onDrop(item);}},}),[onDrop],);return <div ref={drop}>Drop Here</div>;};
目前还没有这方面的文档,但您可以从 HTML5 和测试后端实现中得到启发。后端合同包括 setup()和 teardown() 方法,以及 connectDragSource()、connectDragPreview() 和 connectDropTarget() 方法,这些方法可将 DOM 节点传递给后端。欢迎对文档投稿。
React DnD 需要 React 16.8。请确保您使用的至少是该版本。
请看这个例子:
class Page {static willTransitionTo(transition, params) {/* ... */}render() {/* ... */}}export default DragDropContext(HTML5Backend)(Page);
在这种情况下,路由处理程序的 willTransitionTo(或类似方法)不会被触发,这可能会让您大吃一惊!React DnD 不会代理组件的静态方法和属性。这太脆弱且充满边缘情况,因此您必须自己来做。为此,请将您的静态方法放到 React DnD 返回的组件上:
class Page {render() {/* ... */}}Page = DragDropContext(HTML5Backend)(Page);Page.willTransitionTo = function (transition, params) {/* ... */};export default Page;
虽然只是拖放,但我很喜欢。
Stampsy 自 2013 年以来一直在使用该库以及它的非 React 前身。它是 Stampsy 用户体验的核心,因为所有内容都是在使用 React DnD 的拖放式帖子编辑器中创建的。