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
Functions
Interfaces
Type Aliases
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 {}
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;
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)
- dist/core/DndContext.d.ts
- dist/core/DndProvider.d.ts
- dist/core/DragPreviewImage.d.ts
- dist/hooks/types.d.ts
- dist/hooks/useDrag/useDrag.d.ts
- dist/hooks/useDragDropManager.d.ts
- dist/hooks/useDragLayer.d.ts
- dist/hooks/useDrop/useDrop.d.ts
- dist/index.d.ts
- dist/types/connectors.d.ts
- dist/types/monitors.d.ts
- dist/types/options.d.ts
Dependencies (5)
Dev Dependencies (17)
Peer Dependencies (4)
Badge
To add a badge like this oneto 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>
- Updated .
Package analyzed in 3630 ms. - Missing or incorrect documentation? Open an issue for this package.