ํ๋ก์ ํธ์์ ory ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ory ํธ์ง๊ธฐ๋ react-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)
ํซ ๋ฆฌ๋ก๋ฉ์ผ๋ก ๋ฐ์ 16์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ดํ๋ก @sangmokh ์ ๋์ผํ ๋ฌธ์ ์ ๋๋ค.
๋ฐ์ ์ฑ ๋ง๋ค๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ 16์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ๋๋ ๋์ผํฉ๋๋ค.
์
๋ฐ์ดํธ: ์ด๋ฏธ ์์ ๊ตฌ์ฑ ์์์์ HTML5Backend
๋ฐ DragDropContext
๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ต์์ ๊ตฌ์ฑ ์์๊ฐ ์ค์ ๋ ์์น์ ์๋์ง ํ์ธํ ๋ค์ ์ต์ ๋ฐ์ dnd ๋ฐ html5 ๋ฐฑ์๋๋ก ์
๊ทธ๋ ์ด๋ํ์ต๋๋ค. , ๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ๋ ๋ง์ ์ฒ๋ผ ์ฌ๋ผ์ก์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ /์ค๋ช ์ด ์์ต๋๊น?
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;
@davidspies ์ด๋ป๊ฒ ์ ์ฉ
@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);
@davidspies ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
์ด ์๋ฃจ์
์ ์ฌ์ฉํ๋ฉด ๋์ด์ ๋๊ธฐ ๊ธฐ๋ฅ์ด ์ ํ ์๋ํ์ง ์์ ๋ ๋ ๋ค๋ฅธ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด 'react-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์ ์ฌ์ฉํ ๋๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ด ๊ฒฝ์ฐ๋ฅผ ๋ค์ด, ์
๊ทธ๋ ์ด๋์-DND ๋ฐ์ v8.0.3 ๋ฐ ์ฌ์ฉ 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)