在IIFE中使用React Hooks会破坏钩子规则

时间:2020-11-04 15:48:23

标签: javascript reactjs react-hooks use-state use-context

背景

我正在开发一个侧边栏组件,可以从UI中的许多按钮打开它。我想1)仅渲染一次,2)授予访问权以将这些按钮的isVisible状态更新为这些按钮,而无需通过公共祖先钻取道具。

期望与现实

我希望我可以使用自己的api方法创建一个上下文来更新内部状态。在我的代码示例中,我尝试使用IIFE进行此操作。

问题

  1. 这如何打破钩子规则?
  2. 我还可以如何为此上下文提供更新功能?
export const SidebarContext = createContext((() => {
  const [isVisible, setIsVisible] = useState(false)

  return {
    isVisible,
    toggleVisibility: () => setIsVisible(!isVisible)
  }
})())

1 个答案:

答案 0 :(得分:1)

6接收默认值。因此,您要定义一个立即调用的函数,其结果将用作上下文的默认值。这就是6中断this rule的地方:

从React函数组件中调用钩子。

为了完成您想要的,您可以这样做:

6