使用漂亮的 DND 拖放后,如何防止列表刷新超过 API?
How to prevent refresh of list over API after drag & drop with beautiful DND?
我在 https://codesandbox.io/s/adoring-booth-33vqo 中模拟了我的 Context + DND 问题。我还有其他组件将添加到此示例中,我将使用上下文挂钩在页面上共享值。
初始渲染后,一切看起来都很好。列表的想法是更改其自身的顺序,当使用拖放更改顺序时,它会抛出“Invalid Hook”错误。
所以(第一个)真正的问题是,是什么触发了这个链接到行
的错误
const { lang1Library, updateLang1Library } = useContext(LangContext)
;
在此先感谢您的帮助。
地理位置
为整个项目提供 link 并不是一个好的方法,即使它很小。但我快速浏览了一下,你至少有一处做错了:
// DragEndFct.js
export default function DragEndFct(result, libName) {
const { lang1Library, updateLang1Library } = useContext(LangContext);
这不是 React 组件,但它使用了一个钩子——这是错误的。 Hooks在React中有特殊的意义,应该正确使用(Rules of Hooks).
您不能在常规函数中使用挂钩并期望它们起作用。这就是您收到该错误的原因。
因此,您可以尝试多种方法来解决此问题。例如,DragEndFct
是一个常规函数,您可以声明更多参数并传递从上下文中获得的内容:
// you are using it in components right ?
function DragEndFct(result, libName, param3, param4) {}
// so you probably have access to the context there
// and can pass data from the context when you call it.
// something like this
onDragEnd={function (result) {
console.log();
DragEndFct(result, StaticVars.LANG1_LIBRARY_NAME, lang1Library, updateLang1Library);
}}
你甚至可以让 DragEndFct
成为一个 React 组件 - 它可以只是 return null(这意味着不会呈现 UI)但在那种情况下你会有钩子和那里的所有其他东西。这实际上取决于您需要什么以及如何使用它。
我在 https://codesandbox.io/s/adoring-booth-33vqo 中模拟了我的 Context + DND 问题。我还有其他组件将添加到此示例中,我将使用上下文挂钩在页面上共享值。
初始渲染后,一切看起来都很好。列表的想法是更改其自身的顺序,当使用拖放更改顺序时,它会抛出“Invalid Hook”错误。
所以(第一个)真正的问题是,是什么触发了这个链接到行
的错误const { lang1Library, updateLang1Library } = useContext(LangContext) ;
在此先感谢您的帮助。 地理位置
为整个项目提供 link 并不是一个好的方法,即使它很小。但我快速浏览了一下,你至少有一处做错了:
// DragEndFct.js
export default function DragEndFct(result, libName) {
const { lang1Library, updateLang1Library } = useContext(LangContext);
这不是 React 组件,但它使用了一个钩子——这是错误的。 Hooks在React中有特殊的意义,应该正确使用(Rules of Hooks).
您不能在常规函数中使用挂钩并期望它们起作用。这就是您收到该错误的原因。
因此,您可以尝试多种方法来解决此问题。例如,DragEndFct
是一个常规函数,您可以声明更多参数并传递从上下文中获得的内容:
// you are using it in components right ?
function DragEndFct(result, libName, param3, param4) {}
// so you probably have access to the context there
// and can pass data from the context when you call it.
// something like this
onDragEnd={function (result) {
console.log();
DragEndFct(result, StaticVars.LANG1_LIBRARY_NAME, lang1Library, updateLang1Library);
}}
你甚至可以让 DragEndFct
成为一个 React 组件 - 它可以只是 return null(这意味着不会呈现 UI)但在那种情况下你会有钩子和那里的所有其他东西。这实际上取决于您需要什么以及如何使用它。