Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我会犯这个错误;React检测到SidebarDesktop调用的钩子顺序发生了变化;?_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 为什么我会犯这个错误;React检测到SidebarDesktop调用的钩子顺序发生了变化;?

Javascript 为什么我会犯这个错误;React检测到SidebarDesktop调用的钩子顺序发生了变化;?,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我在SideBarDesktop组件名isSidebarSticky中声明了一个常量,它使用一个自定义钩子(useStickyElement),该钩子有两个参数: const isSidebarSticky = styleStore.contentHeight ? useStickyElement(sideBarDomRef, styleStore.headerHeight + styleStore.contentHeight) : 0; 问题是我得到了这个错误:“React检

我在SideBarDesktop组件名
isSidebarSticky
中声明了一个常量,它使用一个自定义钩子(
useStickyElement
),该钩子有两个参数:

const isSidebarSticky = styleStore.contentHeight
    ? useStickyElement(sideBarDomRef, styleStore.headerHeight + styleStore.contentHeight)
    : 0;
问题是我得到了这个错误:“React检测到SidebarDesktop调用的钩子顺序发生了变化。如果不修复,这将导致bug和错误。”我不知道为什么

另外,如果我没有进行验证,我只写:

const isSidebarSticky = useStickyElement(sideBarDomRef, styleStore.headerHeight + styleStore.contentHeight);
我再也不会犯错误了


问题是,如果我使用第二个示例styleStore.contentHeight没有及时更新(它是0),我必须进行验证,否则结果将是
useStickyElement(sideBarDomRef,styleStore.headerHeight+0)
。即使
styleStore.contentHeight
将大于0,最终将不再调用
useStickyElement

React钩子不能是有条件的。请参见

反应挂钩不能是有条件的。请参见

您不能在调用挂钩中输入术语

如果有钩子未被调用的情况,他将无法比较运行,他将失败

条件可以插入挂钩内部


在文档中

不能在调用钩子中输入术语

如果有钩子未被调用的情况,他将无法比较运行,他将失败

条件可以插入挂钩内部


在文档中

谢谢。但是当styleStore.contentHeight为!==0?将您的条件放入钩子中。当我不需要styleStore.contentHeight时,我也在其他页面中使用此钩子,如下所示:useStickyElement(sideBarDomRef,styleStore.headerHeight)。我已经检查过第二个参数不是0。然后将这个参数放入useEffect。谢谢。但是当styleStore.contentHeight为!==0?将您的条件放入钩子中。当我不需要styleStore.contentHeight时,我也在其他页面中使用此钩子,如下所示:useStickyElement(sideBarDomRef,styleStore.headerHeight)。我已经检查过第二个参数不是0。然后将这个参数放入useEffect。您是在问我们如何使用
useStickyElement
挂钩吗?那钩子是你写的吗?那么你应该在问题中包含这些代码。钩子函数中可以有条件,但每次调用组件函数时都必须调用钩子。您是在问我们如何使用
useStickyElement
hook吗?那钩子是你写的吗?那么你应该在问题中包含这些代码。钩子函数中可以包含条件,但每次调用组件函数时都必须调用钩子。