react-dnd

  • Version 16.0.1
  • Published
  • 231 kB
  • 5 dependencies
  • MIT license

Install

npm i react-dnd
yarn add react-dnd
pnpm add react-dnd

Overview

Drag and Drop for React

Index

Variables

variable DndContext

const DndContext: any;
  • Create the React Context

variable DndProvider

const DndProvider: FC<DndProviderProps<unknown, unknown>>;
  • A React component that provides the React-DnD context

variable DragPreviewImage

const DragPreviewImage: FC<DragPreviewImageProps>;
  • A utility for rendering a drag preview image

Functions

function useDrag

useDrag: <DragObject = unknown, DropResult = unknown, CollectedProps = unknown>(
specArg: FactoryOrInstance<
DragSourceHookSpec<DragObject, DropResult, CollectedProps>
>,
deps?: unknown[]
) => [CollectedProps, ConnectDragSource, ConnectDragPreview];
  • useDragSource hook

    Parameter sourceSpec

    The drag source specification (object or function, function preferred)

    Parameter deps

    The memoization deps array to use when evaluating spec changes

function useDragDropManager

useDragDropManager: () => DragDropManager;
  • A hook to retrieve the DragDropManager from Context

function useDragLayer

useDragLayer: <CollectedProps, DragObject = any>(
collect: (monitor: DragLayerMonitor<DragObject>) => CollectedProps
) => CollectedProps;
  • useDragLayer Hook

    Parameter collector

    The property collector

function useDrop

useDrop: <DragObject = unknown, DropResult = unknown, CollectedProps = unknown>(
specArg: FactoryOrInstance<
DropTargetHookSpec<DragObject, DropResult, CollectedProps>
>,
deps?: unknown[]
) => [CollectedProps, ConnectDropTarget];
  • useDropTarget Hook

    Parameter spec

    The drop target specification (object or function, function preferred)

    Parameter deps

    The memoization deps array to use when evaluating spec changes

Interfaces

interface DndContextType

interface DndContextType {}
  • The React context type

property dragDropManager

dragDropManager: DragDropManager | undefined;

    interface DragLayerMonitor

    interface DragLayerMonitor<DragObject = unknown> {}

      method getClientOffset

      getClientOffset: () => XYCoord | null;
      • Returns the last recorded { x, y } client offset of the pointer while a drag operation is in progress. Returns null if no item is being dragged.

      method getDifferenceFromInitialOffset

      getDifferenceFromInitialOffset: () => XYCoord | null;
      • Returns the { x, y } difference between the last recorded client offset of the pointer and the client offset when current the drag operation has started. Returns null if no item is being dragged.

      method getInitialClientOffset

      getInitialClientOffset: () => XYCoord | null;
      • Returns the { x, y } client offset of the pointer at the time when the current drag operation has started. Returns null if no item is being dragged.

      method getInitialSourceClientOffset

      getInitialSourceClientOffset: () => XYCoord | null;
      • Returns the { x, y } client offset of the drag source component's root DOM node at the time when the current drag operation has started. Returns null if no item is being dragged.

      method getItem

      getItem: <T = DragObject>() => T;
      • Returns a plain object representing the currently dragged item. Every drag source must specify it by returning an object from its beginDrag() method. Returns null if no item is being dragged.

      method getItemType

      getItemType: () => Identifier | null;
      • Returns a string or a symbol identifying the type of the current dragged item. Returns null if no item is being dragged.

      method getSourceClientOffset

      getSourceClientOffset: () => XYCoord | null;
      • Returns the projected { x, y } client offset of the drag source component's root DOM node, based on its position at the time when the current drag operation has started, and the movement difference. Returns null if no item is being dragged.

      method isDragging

      isDragging: () => boolean;
      • Returns true if a drag operation is in progress. Returns false otherwise.

      interface DragPreviewImageProps

      interface DragPreviewImageProps {}

        property connect

        connect: ConnectDragPreview;

          property src

          src: string;

            interface DragPreviewOptions

            interface DragPreviewOptions {}

              property anchorX

              anchorX?: number;
              • Optional. A number between 0 and 1. By default, 0.5. Specifies how the offset relative to the drag source node is translated into the horizontal offset of the drag preview when their sizes don't match. 0 means “dock the preview to the left”, 0.5 means “interpolate linearly” and 1 means “dock the preview to the right”.

              property anchorY

              anchorY?: number;
              • Optional. A number between 0 and 1. By default, 0.5. Specifies how the offset relative to the drag source node is translated into the vertical offset of the drag preview when their sizes don't match. 0 means “dock the preview to the top, 0.5 means “interpolate linearly” and 1 means “dock the preview to the bottom.

              property captureDraggingState

              captureDraggingState?: boolean;
              • Optional. A boolean. By default, false. If true, the component will learn that it is being dragged immediately as the drag starts instead of the next tick. This means that the screenshotting would occur with monitor.isDragging() already being true, and if you apply any styling like a decreased opacity to the dragged element, this styling will also be reflected on the screenshot. This is rarely desirable, so false is a sensible default. However, you might want to set it to true in rare cases, such as if you want to make the custom drag layers work in IE and you need to hide the original element without resorting to an empty drag preview which IE doesn't support.

              property offsetX

              offsetX?: number;
              • Optional. A number or null if not needed. By default, null. Specifies the vertical offset between the cursor and the drag preview element. If offsetX has a value, anchorX won't be used.

              property offsetY

              offsetY?: number;
              • Optional. A number or null if not needed. By default, null. Specifies the vertical offset between the cursor and the drag preview element. If offsetY has a value, anchorY won't be used.

              interface DragSourceHookSpec

              interface DragSourceHookSpec<DragObject, DropResult, CollectedProps> {}

                property canDrag

                canDrag?:
                | boolean
                | ((monitor: DragSourceMonitor<DragObject, DropResult>) => boolean);
                • Optional. Use it to specify whether the dragging is currently allowed. If you want to always allow it, just omit this method. Specifying it is handy if you'd like to disable dragging based on some predicate over props. Note: You may not call monitor.canDrag() inside this method.

                property collect

                collect?: (monitor: DragSourceMonitor<DragObject, DropResult>) => CollectedProps;
                • A function to collect rendering properties

                property end

                end?: (
                draggedItem: DragObject,
                monitor: DragSourceMonitor<DragObject, DropResult>
                ) => void;
                • Optional. When the dragging stops, endDrag is called. For every beginDrag call, a corresponding endDrag call is guaranteed. You may call monitor.didDrop() to check whether or not the drop was handled by a compatible drop target. If it was handled, and the drop target specified a drop result by returning a plain object from its drop() method, it will be available as monitor.getDropResult(). This method is a good place to fire a Flux action. Note: If the component is unmounted while dragging, component parameter is set to be null.

                property isDragging

                isDragging?: (monitor: DragSourceMonitor<DragObject, DropResult>) => boolean;
                • Optional. By default, only the drag source that initiated the drag operation is considered to be dragging. You can override this behavior by defining a custom isDragging method. It might return something like props.id === monitor.getItem().id. Do this if the original component may be unmounted during the dragging and later “resurrected” with a different parent. For example, when moving a card across the lists in a Kanban board, you want it to retain the dragged appearance—even though technically, the component gets unmounted and a different one gets mounted every time you move it to another list.

                  Note: You may not call monitor.isDragging() inside this method.

                property item

                item?: DragObject | DragObjectFactory<DragObject>;
                • This property generates or defines a plain javascript item describing the data being dragged. This is the only information available to the drop targets about the drag source so it's important to pick the minimal data they need to know.

                  You may be tempted to put a reference to the component or complex object here, but you should try very hard to avoid doing this because it couples the drag sources and drop targets. It's a good idea to use something like { id: props.id }

                  If a function-form is used, it is invoked when the drag begins and returns a draggable item. If the function returns null, the drag is canceled

                property options

                options?: DragSourceOptions;
                • The drag source options

                property previewOptions

                previewOptions?: DragPreviewOptions;
                • DragPreview options

                property type

                type: SourceType;
                • The type of item being dragged. This is required when using the function form of spec.item. If spec.item is a static object, the type may either be defined on that object as item.type, or it may be defined here.

                interface DragSourceMonitor

                interface DragSourceMonitor<DragObject = unknown, DropResult = unknown>
                extends HandlerManager,
                MonitorEventEmitter {}

                  method canDrag

                  canDrag: () => boolean;
                  • Returns true if no drag operation is in progress, and the owner's canDrag() returns true or is not defined.

                  method didDrop

                  didDrop: () => boolean;
                  • Returns true if some drop target has handled the drop event, false otherwise. Even if a target did not return a drop result, didDrop() returns true. Use it inside endDrag() to test whether any drop target has handled the drop. Returns false if called outside endDrag().

                  method getClientOffset

                  getClientOffset: () => XYCoord | null;
                  • Returns the last recorded { x, y } client offset of the pointer while a drag operation is in progress. Returns null if no item is being dragged.

                  method getDifferenceFromInitialOffset

                  getDifferenceFromInitialOffset: () => XYCoord | null;
                  • Returns the { x, y } difference between the last recorded client offset of the pointer and the client offset when the current drag operation has started. Returns null if no item is being dragged.

                  method getDropResult

                  getDropResult: <T = DropResult>() => T | null;
                  • Returns a plain object representing the last recorded drop result. The drop targets may optionally specify it by returning an object from their drop() methods. When a chain of drop() is dispatched for the nested targets, bottom up, any parent that explicitly returns its own result from drop() overrides the child drop result previously set by the child. Returns null if called outside endDrag().

                  method getInitialClientOffset

                  getInitialClientOffset: () => XYCoord | null;
                  • Returns the { x, y } client offset of the pointer at the time when the current drag operation has started. Returns null if no item is being dragged.

                  method getInitialSourceClientOffset

                  getInitialSourceClientOffset: () => XYCoord | null;
                  • Returns the { x, y } client offset of the drag source component's root DOM node at the time when the current drag operation has started. Returns null if no item is being dragged.

                  method getItem

                  getItem: <T = DragObject>() => T;
                  • Returns a plain object representing the currently dragged item. Every drag source must specify it by returning an object from its beginDrag() method. Returns null if no item is being dragged.

                  method getItemType

                  getItemType: () => Identifier | null;
                  • Returns a string or a symbol identifying the type of the current dragged item. Returns null if no item is being dragged.

                  method getSourceClientOffset

                  getSourceClientOffset: () => XYCoord | null;
                  • Returns the projected { x, y } client offset of the drag source component's root DOM node, based on its position at the time when the current drag operation has started, and the movement difference. Returns null if no item is being dragged.

                  method getTargetIds

                  getTargetIds: () => Identifier[];
                  • Returns the ids of the potential drop targets.

                  method isDragging

                  isDragging: () => boolean;
                  • Returns true if a drag operation is in progress, and either the owner initiated the drag, or its isDragging() is defined and returns true.

                  interface DragSourceOptions

                  interface DragSourceOptions {}

                    property dropEffect

                    dropEffect?: string;
                    • Optional. A string. By default, 'move'. In the browsers that support this feature, specifying 'copy' shows a special “copying” cursor, while 'move' corresponds to the “move” cursor. You might want to use this option to provide a hint to the user about whether an action is destructive.

                    interface DropTargetHookSpec

                    interface DropTargetHookSpec<DragObject, DropResult, CollectedProps> {}
                    • Interface for the DropTarget specification object

                    property accept

                    accept: TargetType;
                    • The kinds of dragItems this dropTarget accepts

                    property canDrop

                    canDrop?: (
                    item: DragObject,
                    monitor: DropTargetMonitor<DragObject, DropResult>
                    ) => boolean;
                    • Optional. Use it to specify whether the drop target is able to accept the item. If you want to always allow it, just omit this method. Specifying it is handy if you'd like to disable dropping based on some predicate over props or monitor.getItem(). Note: You may not call monitor.canDrop() inside this method.

                    property collect

                    collect?: (monitor: DropTargetMonitor<DragObject, DropResult>) => CollectedProps;
                    • A function to collect rendering properties

                    property drop

                    drop?: (
                    item: DragObject,
                    monitor: DropTargetMonitor<DragObject, DropResult>
                    ) => DropResult | undefined;
                    • Optional. Called when a compatible item is dropped on the target. You may either return undefined, or a plain object. If you return an object, it is going to become the drop result and will be available to the drag source in its endDrag method as monitor.getDropResult(). This is useful in case you want to perform different actions depending on which target received the drop. If you have nested drop targets, you can test whether a nested target has already handled drop by checking monitor.didDrop() and monitor.getDropResult(). Both this method and the source's endDrag method are good places to fire Flux actions. This method will not be called if canDrop() is defined and returns false.

                    property hover

                    hover?: (
                    item: DragObject,
                    monitor: DropTargetMonitor<DragObject, DropResult>
                    ) => void;
                    • Optional. Called when an item is hovered over the component. You can check monitor.isOver({ shallow: true }) to test whether the hover happens over just the current target, or over a nested one. Unlike drop(), this method will be called even if canDrop() is defined and returns false. You can check monitor.canDrop() to test whether this is the case.

                    property options

                    options?: DropTargetOptions;
                    • The drop target options

                    interface DropTargetMonitor

                    interface DropTargetMonitor<DragObject = unknown, DropResult = unknown>
                    extends HandlerManager,
                    MonitorEventEmitter {}

                      method canDrop

                      canDrop: () => boolean;
                      • Returns true if there is a drag operation in progress, and the owner's canDrop() returns true or is not defined.

                      method didDrop

                      didDrop: () => boolean;
                      • Returns true if some drop target has handled the drop event, false otherwise. Even if a target did not return a drop result, didDrop() returns true. Use it inside drop() to test whether any nested drop target has already handled the drop. Returns false if called outside drop().

                      method getClientOffset

                      getClientOffset: () => XYCoord | null;
                      • Returns the last recorded { x, y } client offset of the pointer while a drag operation is in progress. Returns null if no item is being dragged.

                      method getDifferenceFromInitialOffset

                      getDifferenceFromInitialOffset: () => XYCoord | null;
                      • Returns the { x, y } difference between the last recorded client offset of the pointer and the client offset when current the drag operation has started. Returns null if no item is being dragged.

                      method getDropResult

                      getDropResult: <T = DropResult>() => T | null;
                      • Returns a plain object representing the last recorded drop result. The drop targets may optionally specify it by returning an object from their drop() methods. When a chain of drop() is dispatched for the nested targets, bottom up, any parent that explicitly returns its own result from drop() overrides the drop result previously set by the child. Returns null if called outside drop().

                      method getInitialClientOffset

                      getInitialClientOffset: () => XYCoord | null;
                      • Returns the { x, y } client offset of the pointer at the time when the current drag operation has started. Returns null if no item is being dragged.

                      method getInitialSourceClientOffset

                      getInitialSourceClientOffset: () => XYCoord | null;
                      • Returns the { x, y } client offset of the drag source component's root DOM node at the time when the current drag operation has started. Returns null if no item is being dragged.

                      method getItem

                      getItem: <T = DragObject>() => T;
                      • Returns a plain object representing the currently dragged item. Every drag source must specify it by returning an object from its beginDrag() method. Returns null if no item is being dragged.

                      method getItemType

                      getItemType: () => Identifier | null;
                      • Returns a string or a symbol identifying the type of the current dragged item. Returns null if no item is being dragged.

                      method getSourceClientOffset

                      getSourceClientOffset: () => XYCoord | null;
                      • Returns the projected { x, y } client offset of the drag source component's root DOM node, based on its position at the time when the current drag operation has started, and the movement difference. Returns null if no item is being dragged.

                      method isOver

                      isOver: (options?: { shallow?: boolean }) => boolean;
                      • Returns true if there is a drag operation in progress, and the pointer is currently hovering over the owner. You may optionally pass { shallow: true } to strictly check whether only the owner is being hovered, as opposed to a nested target.

                      interface HandlerManager

                      interface HandlerManager {}

                        property getHandlerId

                        getHandlerId: () => Identifier | null;

                          property receiveHandlerId

                          receiveHandlerId: (handlerId: Identifier | null) => void;

                            interface MonitorEventEmitter

                            interface MonitorEventEmitter {}

                              method subscribeToStateChange

                              subscribeToStateChange: (
                              fn: () => void,
                              options?: { handlerIds?: Identifier[] }
                              ) => Unsubscribe;

                                interface XYCoord

                                interface XYCoord {}

                                  property x

                                  x: number;

                                    property y

                                    y: number;

                                      Type Aliases

                                      type ConnectableElement

                                      type ConnectableElement = RefObject<any> | ReactElement | Element | null;

                                        type ConnectDragPreview

                                        type ConnectDragPreview = DragElementWrapper<DragPreviewOptions>;

                                          type ConnectDragSource

                                          type ConnectDragSource = DragElementWrapper<DragSourceOptions>;

                                            type ConnectDropTarget

                                            type ConnectDropTarget = DragElementWrapper<any>;

                                              type DndProviderProps

                                              type DndProviderProps<BackendContext, BackendOptions> =
                                              | {
                                              children?: ReactNode;
                                              manager: DragDropManager;
                                              }
                                              | {
                                              backend: BackendFactory;
                                              children?: ReactNode;
                                              context?: BackendContext;
                                              options?: BackendOptions;
                                              debugMode?: boolean;
                                              };

                                                type DragElementWrapper

                                                type DragElementWrapper<Options> = (
                                                elementOrNode: ConnectableElement,
                                                options?: Options
                                                ) => ReactElement | null;

                                                  type DragObjectFactory

                                                  type DragObjectFactory<T> = (monitor: DragSourceMonitor<T>) => T | null;

                                                    type DropTargetOptions

                                                    type DropTargetOptions = any;

                                                      type FactoryOrInstance

                                                      type FactoryOrInstance<T> = T | (() => T);

                                                        Package Files (12)

                                                        Dependencies (5)

                                                        Dev Dependencies (17)

                                                        Peer Dependencies (4)

                                                        Badge

                                                        To add a badge like this onejsDocs.io badgeto your package's README, use the codes available below.

                                                        You may also use Shields.io to create a custom badge linking to https://www.jsdocs.io/package/react-dnd.

                                                        • Markdown
                                                          [![jsDocs.io](https://img.shields.io/badge/jsDocs.io-reference-blue)](https://www.jsdocs.io/package/react-dnd)
                                                        • HTML
                                                          <a href="https://www.jsdocs.io/package/react-dnd"><img src="https://img.shields.io/badge/jsDocs.io-reference-blue" alt="jsDocs.io"></a>