Skip to content

Example in README throws error on useDragDropContext #67

Closed

Description

@enochchau

I'm trying to run the example code in the README.

import {
  DragDropProvider,
  DragDropSensors,
  useDragDropContext,
  createDraggable,
  createDroppable,
} from "@thisbeyond/solid-dnd";
import { render } from 'solid-js/web'

const Draggable = (props) => {
  const draggable = createDraggable(props.id);
  return <div use:draggable>draggable</div>;
};

const Droppable = (props) => {
  const droppable = createDroppable(props.id);
  return <div use:droppable>droppable</div>;
};

const Sandbox = () => {
  const [, { onDragEnd }] = useDragDropContext();

  onDragEnd(({draggable, droppable}) => {
    if (droppable) {
      // Handle the drop. Note that solid-dnd doesn't move a draggable into a
      // droppable on drop. It leaves it up to you how you want to handle the
      // drop.
    }
  });

  return (
    <div>
      <Draggable id="draggable-1" />
      <Droppable id="droppable-1" />
    </div>
  );
};

const App = () => {
  return (
    <DragDropProvider>
      <DragDropSensors>
        <Sandbox />
      </DragDropSensors>
    </DragDropProvider>
  );
};


let appRoot = document.getElementById("app")! as HTMLDivElement;
render(() => <App/>, appRoot);

I'm getting the following error on Chrome:

Uncaught TypeError: useDragDropContext is not a function or its return value is not iterable
    at createPointerSensor (create-pointer-sensor.js?v=65bad4a2:4:108)
    at DragDropSensors (drag-drop-sensors.jsx:3:5)
    at dev.js:516:12
    at untrack (dev.js:421:12)
    at Object.fn (dev.js:512:37)
    at runComputation (dev.js:694:22)
    at updateComputation (dev.js:677:3)
    at devComponent (dev.js:523:3)
    at createComponent (dev.js:1225:10)
    at get children [as children] (main.tsx:111:22)

and on Firefox:

Uncaught TypeError: (intermediate value)() is null
    createPointerSensor create-pointer-sensor.js:4
    DragDropSensors drag-drop-sensors.jsx:3
    c dev.js:516
    untrack dev.js:421
    c dev.js:512
    runComputation dev.js:694
    updateComputation dev.js:677
    devComponent dev.js:523
    createComponent dev.js:1225
    get children main.tsx:111
    get dev.js:1290
    get children drag-drop-context.jsx:503
    res dev.js:969
    runComputation dev.js:694
    updateComputation dev.js:677
    createMemo dev.js:238
    children dev.js:577
    res dev.js:969
    untrack dev.js:421
    provider dev.js:965
    runComputation dev.js:694
    updateComputation dev.js:677
    createRenderEffect dev.js:205
    provider dev.js:965
    c dev.js:516
    untrack dev.js:421
    c dev.js:512
    runComputation dev.js:694
    updateComputation dev.js:677
    devComponent dev.js:523
    createComponent dev.js:1225
    DragDropProvider drag-drop-context.jsx:503
    c dev.js:516
    untrack dev.js:421
    c dev.js:512
    runComputation dev.js:694
    updateComputation dev.js:677
    devComponent dev.js:523
    createComponent dev.js:1225
    _Hot$$App main.tsx:110
    hmrCompWrapper @solid-refresh:10
    untrack dev.js:421
    hmrCompWrapper @solid-refresh:10
    runComputation dev.js:694
    updateComputation dev.js:677
    createMemo dev.js:238
    hmrCompWrapper @solid-refresh:7
    c dev.js:516
    untrack dev.js:421
    c dev.js:512
    runComputation dev.js:694
    updateComputation dev.js:677
    devComponent dev.js:523
    createComponent dev.js:1225
    _cleanup main.tsx:121
    render dev.js:93
    updateFn dev.js:168
    runUpdates dev.js:786
    createRoot dev.js:176
    render dev.js:91
    <anonymous> main.tsx:121

Activity

  1. gg-jj commented on Nov 17, 2022

    @gg-jj

    I had the same problem with Vite version 3.2.4 and npm run dev.
    To fix was to change the Vite version to 3.0.0.

    I checked and found that drag-drop-context.jsx was called twice.
    It seems that the DragDropProvider executed in the first module initialization is tied to the first Context.
    However, in the second module initialization, useDragDropContext is called after Context is initialized, but before DragDropProvider is called, so useContext() is undefined as a result. It seems that useContext() is undefined as a result.

    I'm thinking that perhaps esbuild or rollup in Vite is affecting this.
    The same problem does not occur in bundles created with npm run build.

    The package versions involved at the time of the check are as follows

    • @thisbeyond/solid-dnd: 0.7.3
    • solid-js: 1.6.2
    • vite: 3.2.4
    • vite-plugin-solid: 2.4.0
  2. martinpengellyphillips commented on Nov 19, 2022

    @martinpengellyphillips
    Contributor

    This is a vite<>solid issue. However, it should have been resolved at this point with those versions.
    You may need to update your vite config perhaps? See #53 (comment) for details and https://github.com/thisbeyond/solid-dnd-site for reference.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions