Skip to content

useDrop

Reads drag, drop, and paste data from a target element.

Reads drag, drop, and paste data from a target element.

Import

import { useDrop } from '@kamod-ch/hooks'

Live demo

Basic demo

Reads drag, drop, and paste data from a target element.

Browser-only demo

This demo starts after the page mounts in the browser.
import { useRef, useState } from 'preact/hooks'
import { useDrag, useDrop } from '@kamod-ch/hooks'

export default function UseDropDemo() {
  const sourceRef = useRef<HTMLDivElement>(null)
  const targetRef = useRef<HTMLDivElement>(null)
  const [dropped, setDropped] = useState('nothing yet')
  useDrag({ label: 'Dragged payload' }, sourceRef)
  useDrop(targetRef, { onDom: (content) => setDropped(content?.label ?? 'received data') })

  return (
    <div class="demo-grid">
      <div ref={sourceRef} class="demo-target-box">Drag this payload</div>
      <div ref={targetRef} class="demo-target-box">Drop target</div>
      <p><strong>Drop result:</strong> {dropped}</p>
    </div>
  )
}

API

TypeScript signature
import type { BasicTarget } from '../utils/domTarget.js';
export interface Options {
    onFiles?: (files: File[], event?: DragEvent) => void;
    onUri?: (url: string, event?: DragEvent) => void;
    onDom?: (content: any, event?: DragEvent) => void;
    onText?: (text: string, event?: ClipboardEvent) => void;
    onDragEnter?: (event?: DragEvent) => void;
    onDragOver?: (event?: DragEvent) => void;
    onDragLeave?: (event?: DragEvent) => void;
    onDrop?: (event?: DragEvent) => void;
    onPaste?: (event?: ClipboardEvent) => void;
}
declare const useDrop: (target: BasicTarget, options?: Options) => void;
export default useDrop;
/

SSR considerations

This hook touches browser APIs. Render it after mount or guard it with BrowserOnly in SSR and static builds.

Browser compatibility

Requires the corresponding browser API to exist in the current environment.