【发布时间】:2017-06-25 15:29:53
【问题描述】:
假设我有一个包含以下组件和路由的 React 应用程序(使用 React Router 4):
-
App(/)-
Toolbar- 固定工具栏-
NavButton- 外观和行为取决于当前路线的按钮(见下文)
-
-
MainMenu- 一个从侧面弹出的临时抽屉,用于在顶级路线之间导航 -
Admin(/admin)-
Sidenav- 在大屏幕上一直打开的导航抽屉,可以在小屏幕上切换。单击Sidenav中的项目导航到/admin下的不同子路由 -
Content(/admin/<xyz>)
-
-
Public(/public)Content
-
NavButton 的行为应该如下:
- 在大屏幕上:
- 应该始终是打开
MainMenu的汉堡包图标。
- 应该始终是打开
- 在小屏幕上:(除了第一个条件,这个和Gmail手机app上的体验差不多)
- 如果没有
Sidenav,它应该显示一个打开MainMenu的汉堡图标。 - 如果
Sidenav已关闭,它应该显示一个打开Sidenav的后退图标。 - 如果
Sidenav已打开,它应该显示一个打开MainMenu的汉堡图标。
- 如果没有
/admin 和 /public 路由只是示例。还有更多,其中一些有Sidenavs,而另一些则没有。
我的问题是:在这里管理 UI 状态并将所有组件和路由连接在一起的 React 方法是什么?感觉App 应该负责跟踪sidenav 是否打开,所以它可以将该信息传递给Toolbar 和其他人,但它似乎也像App 不应该负责管理哪些潜在的孩子有或没有Sidenavs。另外,当Route 之间存在Route 时,道具如何从App 传递给某个孩子?
注意:我对 React 还很陌生,当然不会与上面的组件结构结合;这只是为了说明。
【问题讨论】:
-
为了记录,我知道我可以通过将
NavButton和Sidenav连接到 redux 存储并简单地对state.isScreenBig和 @ 中的更改做出反应,将它们变成“智能”组件987654356@。但这似乎很庸俗。另外,它不包括state.isSidenavActive === true和用户从/admin导航到/public的情况。谁负责将state.isSidenavActive设置回false?
标签: reactjs react-router react-router-v4