React-dnd: Π½Π΅ ΠΌΠΎΠ³Ρƒ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ html5backend Π΄Π²Π° Ρ€Π°Π·Π°

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 29 сСнт. 2017  Β·  13ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: react-dnd/react-dnd

Π― Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ 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)

ВсС 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)

Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ @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 Ρ€Π΅ΡˆΠΈΠ»ΠΎ мою ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ