Javascript 为什么我会犯这个错误;React检测到SidebarDesktop调用的钩子顺序发生了变化;?
我在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检
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吗?那钩子是你写的吗?那么你应该在问题中包含这些代码。钩子函数中可以包含条件,但每次调用组件函数时都必须调用钩子。