【发布时间】:2016-09-04 11:39:06
【问题描述】:
我目前正在构建一个名为 Serif 的课程安排应用程序,它会在首次加载时将课程数据加载到 PouchDB 中。用户界面是这样的:
“当前术语”是一个下拉列表,用于控制在任何给定时间使用的当前数据集。例如,如果选择“2016 秋季”,则用户可以使用 2016 秋季目录中的课程搜索、浏览、选择课程和创建日历。当用户切换到“2016 Spring”时,他们现在将使用 2016 Spring 数据集,依此类推。
我正在使用 PouchDB 将所有内容保存在客户端(至少目前是这样)。话虽如此,这是我当前的组件结构(粗略地说,没有仅用于布局的组件):
- Serif(我的路由器路由之一)
- 子导航
- TermSelect(这是您在右上角看到的:“Current Term”)
- 搜索
- 浏览
- 日历
- 日历选择的东西
- 实际日历
- 子导航
我的问题集中在从 PouchDB 到 TermSelect 组件的数据流(但正确答案将告知我所有其他组件的结构)。
按照我现在的构建方式,Serif 有一个名为 currentTerm 的状态,用于跟踪应用程序的当前术语。在构造函数中,查询 PouchDB 的第一个术语并将 currentTerm 设置为该值。
在 Serif 的 render 方法中,查询 PouchDB 以获取 db 中的术语列表,并将该列表格式化为预期格式,然后作为 prop 传递给 Subnav 组件,该组件又将其传递给 TermSelect 组件.
TermSelect 组件使用接收到的道具来填充下拉列表并将其默认显示值设置为列表中的第一个,从而导致您在上面看到“2016 Fall”。选择选项时,调用了作为数据的一部分传递的回调函数,该函数更改了衬线组件的状态。
除了默认值需要单击才能显示的问题之外,这主要是可行的。这是做事的正确方法吗? TermSelect 组件可以直接从 PouchDB 中查询,而不是将术语数据从 Serif 传递到 TermSelect 组件。
任何改进建议,甚至只是确认这是正确的数据流模式,我们都将不胜感激。我是 React 新手,在处理所有正确模式和反模式时遇到了麻烦(不要使用 prop 来设置状态,组件应该将数据从有状态传递到无状态,等等)。
谢谢!
【问题讨论】:
标签: design-patterns reactjs pouchdb