Composition API
我们提供了三个主要的钩子来将你的组件连接到Vue3 DnD。并且提供了第四个钩子来让你在开发或测试中连接到Vue3 DnD。
useDrag
useDrop
useDragLayer
useDragDropManager
(开发/测试挂钩)
基本示例
使用composition api制作一个简单的可以拖放的盒子。
<script setup lang="ts"> import { useDrag } from 'vue3-dnd' import { toRefs } from "@vueuse/core"; const [collect, drag, dragPreview] = useDrag(() => ({ // “type”是必需的。它由放置目标的“accept”使用。 type: 'BOX', // collect 函数传入一个“监视器”实例,用于从 DnD 中获取需要的状态信息。 collect: (monitor) => ({ isDragging: monitor.isDragging() }) })) // collect是一个Ref对象,默认取值需要从collect.value中获取, // 可以使用toRefs将Ref对象转换为可解构的对象 const { isDragging } = toRefs(collect) </script> <template> <!-- 这是可选的。默认情况下,dragPreview 将附加到 dragSource --> <div :ref="dragPreview" :style="{ opacity: isDragging ? 0.5 : 1 }"> <div role="Handle" :ref="drag"/> </div> </template>
copy success
接下来,我们需要一个放置目标。
<script setup lang="ts"> import {useDrop} from 'vue3-dnd' import {toRefs} from '@vueuse/core' const [collect, drop] = useDrop(() => ({ // 允许放置的type(string|symbol),或者types accept: 'BOX', // 传递个collect的数据 collect: monitor => ({ isOver: monitor.isOver(), canDrop: monitor.canDrop(), }), })) const {canDrop, isOver} = toRefs(collect) </script> <template> <div :ref="drop" :style="{ backgroundColor: isOver ? 'red' : 'white' }"> {{ canDrop ? 'Release to drop' : 'Drag a box here' }} </div> </template>
copy success
这样我们就实现了一个拖拽的盒子,你可以接着阅读单独的API文档,或者查看示例。