React-dnd: html5backend๋ฅผ ๋‘ ๋ฒˆ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์— ๋งŒ๋“  2017๋…„ 09์›” 29์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: react-dnd/react-dnd

ํ”„๋กœ์ ํŠธ์—์„œ 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)

๋ชจ๋“  13 ๋Œ“๊ธ€

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์˜ค๋ฅ˜ ์Šคํƒ ์ถ”์ ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” 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 ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰