最小的 react-dnd 挂钩示例在 "Expected drag drop context" 上中断
Minimal react-dnd hooks example breaks on "Expected drag drop context"
我在实践中构造了一个 react-dnd
钩子 API 的最小示例,但它遇到了运行时错误:
import { useDrag, useDrop, DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";
export default function App() {
var matchDrag = useDrag({
type: "FILE"
});
var matchDrop = useDrop({
accept: "FILE",
drop: function (item, monitor) {
console.log("dropped");
}
});
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<DndProvider backend={HTML5Backend}>
<div ref={matchDrag[1]}>Drag</div>
</DndProvider>
<DndProvider backend={HTML5Backend}>
<div ref={matchDrop[1]}>Drop</div>
</DndProvider>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
这是 CodeSandbox 中的完整复制:https://codesandbox.io/s/long-rgb-c4i69?file=/src/App.js。
想知道这里的问题是什么吗?
DndProvider
必须在使用 useDrag
/ useDrop
挂钩的组件外部。它应该像这样从 App
组件中分解出来:
<DndProvider backend={HTML5Backend}>
<App />
</DndProvider>
我在实践中构造了一个 react-dnd
钩子 API 的最小示例,但它遇到了运行时错误:
import { useDrag, useDrop, DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";
export default function App() {
var matchDrag = useDrag({
type: "FILE"
});
var matchDrop = useDrop({
accept: "FILE",
drop: function (item, monitor) {
console.log("dropped");
}
});
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<DndProvider backend={HTML5Backend}>
<div ref={matchDrag[1]}>Drag</div>
</DndProvider>
<DndProvider backend={HTML5Backend}>
<div ref={matchDrop[1]}>Drop</div>
</DndProvider>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
这是 CodeSandbox 中的完整复制:https://codesandbox.io/s/long-rgb-c4i69?file=/src/App.js。
想知道这里的问题是什么吗?
DndProvider
必须在使用 useDrag
/ useDrop
挂钩的组件外部。它应该像这样从 App
组件中分解出来:
<DndProvider backend={HTML5Backend}>
<App />
</DndProvider>