Π― Ρ
ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ory Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ory ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ response-dnd ΠΈ Π½Π°ΡΡΡΠΎΠΈΠ» html5backend,
ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΉ DragDropContext Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½, Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅,
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅ΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² React 16, Π½ΠΎ Π½Π΅ Π² React 15. ΠΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ Π³ΠΎΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ react-dnd.
Uncaught Error: Cannot have two HTML5 backends at the same time.
at HTML5Backend.setup (HTML5Backend.js:89)
at DragDropManager.handleRefCountChange (DragDropManager.js:52)
at Object.dispatch (createStore.js:186)
at HandlerRegistry.addTarget (HandlerRegistry.js:114)
at registerTarget (registerTarget.js:9)
at DragDropContainer.receiveType (decorateHandler.js:150)
at DragDropContainer.receiveProps (decorateHandler.js:139)
at new DragDropContainer (decorateHandler.js:106)
at constructClassInstance (react-dom.development.js:9760)
at updateClassComponent (react-dom.development.js:10215)
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠΎ ΠΈ Ρ @sangmokh Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅Π°ΠΊΡΠΈΠΈ 16 Ρ Π³ΠΎΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ.
ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π·Π΄Π΅ΡΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎ React 16, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ create response.
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Ρ ΡΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π» HTML5Backend
ΠΈ DragDropContext
Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅, ΡΠ±Π΅Π΄ΠΈΠ²ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π±ΡΠ» ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ Π±ΡΠ» Π½Π°ΡΡΡΠΎΠ΅Π½, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΡΡ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ response dnd ΠΈ html5 backend , ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ»ΡΠ΅Π±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΡΡΠ΅Π·Π»Π°.
Π΅ΡΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ / ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ react-hot-loader
, react-dnd
ΠΈ react-dnd-html5-backend
. Π§ΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ HTML5Backend Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°, Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ» DragDropContext Π² ΡΠ°ΠΌΡΠΉ Π²Π΅ΡΡ
Π½ΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
import { AppContainer } from 'react-hot-loader';
import { DragDropContext } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
const AppContainerDnD = DragDropContext(HTML5Backend)(AppContainer);
ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΡ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ AppContainer ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ:
render(
<AppContainerDnD>
<Root store={store} history={history}/>
</AppContainerDnD>,
document.getElementById('app')
);
if (module.hot) {
module.hot.accept('./components/Root', () => {
const NewRoot = require('./components/Root').default;
render(
<AppContainerDnD>
<NewRoot store={store} history={history}/>
</AppContainerDnD>,
document.getElementById('app')
);
});
}
ΠΠΎΡΡΠ°ΡΠ°ΡΡΡ Π½Π΅ Π·Π°Π±ΡΡΡ ΡΠΎΠΎΠ±ΡΠΈΡΡ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
@havardge ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΠΏΠΎΠΏΡΠΎΠ±ΡΡ!
ΠΠΎΠΉ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΡΠ·Π½ΡΠΉ, Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
window.__isReactDndBackendSetUp = false;
@davidspiess ΠΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΊΠ°ΠΊ Π²Ρ ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ?
@IvanGrodno, Π²ΠΎΡ ΠΈ Π²ΡΠ΅!
import * as React from "react";
import { DragDropContext } from "react-dnd";
import HTML5Backend from "react-dnd-html5-backend";
const App = () => <div>Your App</div>;
// Hack until this ticket is fixed https://github.com/react-dnd/react-dnd/issues/894
window.__isReactDndBackendSetUp = false;
export default DragDropContext(HTML5Backend)(App);
@davidspiess ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ²Π΅Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»Π° Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Β«response-dnd-mouse-backendΒ» Π²ΠΌΠ΅ΡΡΠΎ Β«react-dnd-html5-backendΒ» ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ DragDropContext, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ:
import * as React from "react";
import { DragDropContext } from "react-dnd";
import HTML5Backend from "react-dnd-html5-backend";
const App = () => <div>Your App</div>;
window.__DragDropContext = window.__DragDropContext ||Β DragDropContext(HTML5Backend);
export default window.__DragDropContext(HTML5Backend)(App);
ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ (Π΄Π»Ρ ΠΌΠ΅Π½Ρ) ΡΠΎΠ»ΡΠΊΠΎ Ρ DragDropContextProvider. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DragDropContext ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π³ΠΎΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ / HMR
Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ response -dnd Π΄ΠΎ DndProvider
Π²ΠΌΠ΅ΡΡΠΎ DragDropContext
ΡΠ΅ΡΠΈΠ»ΠΎ ΠΌΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅ΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² React 16, Π½ΠΎ Π½Π΅ Π² React 15. ΠΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ Π³ΠΎΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ react-dnd.
Uncaught Error: Cannot have two HTML5 backends at the same time. at HTML5Backend.setup (HTML5Backend.js:89) at DragDropManager.handleRefCountChange (DragDropManager.js:52) at Object.dispatch (createStore.js:186) at HandlerRegistry.addTarget (HandlerRegistry.js:114) at registerTarget (registerTarget.js:9) at DragDropContainer.receiveType (decorateHandler.js:150) at DragDropContainer.receiveProps (decorateHandler.js:139) at new DragDropContainer (decorateHandler.js:106) at constructClassInstance (react-dom.development.js:9760) at updateClassComponent (react-dom.development.js:10215)