【发布时间】:2020-06-23 22:51:49
【问题描述】:
我来自 Vue 背景,当 HTML 被拆分为多个部分时,我很难理解如何有条件地显示某些内容。
假设我得到以下结构:
import React, { useState } from "react";
const [mobileNavOpen, setMobileNavOpen] = useState(false);
function Home() {
return (
<div>
<button
onClick={(): void => setMobileNavOpen(true)}
type="button"
className="btn"
>
X
</button>
{mobileNavOpen && <MobileNav />}
</div>
);
}
function MobileNav() {
return (
<div>
<button
onClick={(): void => setMobileNavOpen(false)}
type="button"
className="btn"
>
X
</button>
</div>
);
}
export default Home;
如何在 Home() 和 MobileNav() 中访问 [mobileNavOpen, setMobileNavOpen]。基本上,我想要实现的是一个 Home 组件,用户可以在其中按下一个按钮,在该按钮上,MobileMenu 组件打开一个按钮,他们可以使用另一个按钮再次关闭菜单。
现在,倒数第二行const [mobileNavOpen, setMobileNavOpen] = useState(false);
结果是Error: Invalid hook call. Hooks can only be called inside of the body of a function component.,但我会把它放在哪里?
这一行是否应该在 Home() 组件中,并且所有子组件都会发出一个事件来显示或关闭菜单?或者我需要一个状态管理库来做这么简单的事情吗?执行此操作的“React”方式是什么?
【问题讨论】:
标签: javascript reactjs react-hooks next.js