ΠΠΏΠΈΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ DragSource
Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ (ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ)
ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:
import * as React from "react";
import styled from "styled-components";
import {
DragSource,
DragSourceConnector,
DragSourceMonitor,
ConnectDragSource
} from "react-dnd";
const ImageHolder = styled.div`
margin: 10px;
max-width: 200px;
width: 200px;
min-height: 100px;
position: relative;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
`;
const ImageNameHolder = styled.div`
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 10px;
background-color: rgba(0, 0, 0, 0.5);
font-size: 13px;
`;
interface Props {
imagePath: string;
connectDragSource?: ConnectDragSource;
isDragging?: boolean;
}
@DragSource<Props>(
"image",
{
beginDrag: (props: Props) => props.imagePath
},
(connect: DragSourceConnector, monitor: DragSourceMonitor) => ({
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
})
)
export class PhotosBrowserPhoto extends React.Component<Props> {
render() {
const { imagePath, connectDragSource } = this.props;
console.log({ connectDragSource });
return connectDragSource(
<div>drag me</div>
);
}
}
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π½ΡΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ drag me
text, connectDragSource
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΏΡΡΡΠ°
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ ΡΠΎ ΠΌΠ½ΠΎΠΉ, Ρ ΠΎΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ES6:
import React, { Component } from "react";
import { DragSource } from "react-dnd";
import PropTypes from "prop-types";
import "./Dictionary.css";
const propTypes = {
entry: PropTypes.object.isRequired,
// Injected by React DnD:
isDragging: PropTypes.bool.isRequired,
connectDragSource: PropTypes.func.isRequired
};
const TYPES = {
ROW: "row"
};
/**
* Implements the drag source contract.
*/
const rowSource = {
beginDrag(props) {
console.log(props);
return {
entry: props.entry
};
}
};
/**
* Specifies the props to inject into your component.
*/
function collect(connect, monitor) {
return {
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
};
}
class Row extends Component {
constructor(props) {
console.log("here");
super(props);
this.state = {
entry: props.entry
};
}
static getDerivedStateFromProps = (props, state) => {
return {
entry: props.entry
};
};
render() {
const { isDragging, connectDragSource } = this.props;
const { entry } = this.state;
console.log("dragging:", isDragging);
return connectDragSource(
<div style={{ opacity: isDragging ? 0.5 : 1 }} className="row">
<div>{entry.string}</div>
<div>{entry.kMandarin}</div>
<div>{entry.kDefinition}</div>
</div>
);
}
}
Row.propTypes = propTypes;
export default DragSource(TYPES.ROW, rowSource, collect)(Row);
Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:
"react-dnd-html5-backend": "^5.0.1",
"react-dom": "^16.5.1",
ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ: ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΆΡΡΠ½Π°Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
ΠΠΊΡΡΠ°Π»ΡΠ½ΠΎ: Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ; Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π² ΠΊΠΎΡΠ΅Π½Ρ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ - Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ Π½ΡΠΆΠ΅Π½ - Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ if
-Π·Π°ΠΏΠΈΡΡ:
https://github.com/react-dnd/react-dnd/blob/934efc81871f30c6038e2dc52be1504fe38132e7/packages/react-dnd/src/decorateHandler.tsx#L210
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΄Π°Π»Π° Π±Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
import HTML5Backend from 'react-dnd-html5-backend'
import { DragDropContextProvider } from "react-dnd";
<DragDropContextProvider backend={HTML5Backend}>
<App/>
</DragDropContextProvider>
ΠΊ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ: Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΡΠ°Π»ΠΎΠ² ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» Π΅Π΅, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ReactDOM.unstable_renderSubtreeIntoContainer
API Π½Π° ReactDOM.createPortal
.
ΠΠΎΡΠ΅ΠΌΡ Ρ Π½Π΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ΠΎΠΌ, Π½Π°ΡΠ΅Π» ΠΎΡΠ²Π΅Ρ Π·Π΄Π΅ΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΎΡΠ½Π΅ΡΠΈΡΠ΅ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π·ΡΡ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΠ°ΠΆΠ΅ΡΡΡ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΠΈΠ² React 16.8.1, ΠΌΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, Π° Context.Consumer Π²Π½ΡΡΡΠΈ DragSource
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠΎΠ³ΠΎ Π½Π΅Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ "ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ".
ΠΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ , ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ...
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ±ΠΎΡΠΊΠ°Ρ
(Ρ ΡΠ±Π΅Π΄ΠΈΠ»ΡΡ, ΡΡΠΎ DragDropContextProvider
ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΌΠΎΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π΅). Π― Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Π°ΠΊΡΠΈΠΈ DragDropContextProvider
ΡΠ΅ΡΡΠ΅ΡΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Unknown
Π² Π΄Π΅ΡΠ΅Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (ΡΠΌ. Π‘Π½ΠΈΠΌΠΎΠΊ ΡΠΊΡΠ°Π½Π°)
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Ρ v7.3.2 Π½Π°
ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
Π― ΡΠΎΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, Π½ΠΎ Π½Π΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅.
ΠΡΠΎ ΠΌΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅.
const render = () => {
ReactDOM.render(
<DragDropContextProvider backend={HTML5Backend}>
<Provider store={store}>
<ConnectedRouter history={history}>
<AppContainer>
<App />
</AppContainer>
</ConnectedRouter>
</Provider>
</DragDropContextProvider>,
document.getElementById('app')
);
};
DragDropContextProvider Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π½Π°Π΅Ρ, Π±ΡΠ»ΠΎ Π»ΠΈ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ»ΠΎΡΡ?
ΠΠ°ΠΊ Ρ ΡΠ΅ΡΠΈΠ»
Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π² dev, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π»ΠΎΠΌΠ°Π»ΠΎΡΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°
ΠΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠΌΠΏΠΎΡΡ
import {useDrag} from "react-dnd/lib/index";
Π Π°Π±ΠΎΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ
import {useDrag} from "react-dnd";
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΌΠΎΠ³Ρ Ρ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ DndProvider Π² ΠΊΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ . Π― Π΄Π΅Π»Π°Π» ΡΡΠΎ ΡΠ°Π½ΡΡΠ΅ ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° ΠΈΠΌΠΏΠΎΡΡΠ°, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Β«ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΒ» ΠΈΠΌΠΏΠΎΡΡΠ° Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» DndProvider Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°), ΠΈ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΎΡΠ»ΠΈΡΠ½ΠΎ.
ΠΠΎΠ½ΡΠ΅ΠΊΡΡ:
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅? Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ.
"react-dnd": "^ 11.1.3",
"response-dnd-html5-backend": "^ 11.1.3",
Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Ρ Π½Π΅ Π²ΠΈΠΆΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, Π½ΠΎ Π²ΠΈΠΆΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π°Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅: