【发布时间】:2015-11-21 02:58:24
【问题描述】:
我有一个很大的表格,里面有 4 个部分。
看起来像这样:
_______________
| | |
| 1 | 2 |
|______|______|
| | |
| 3 | 4 |
|______|______|
所有部分形成自己的 jsx 文件。第 1 节称为 Section1.jsx,第 2 节称为 Section2.jsx,依此类推。
第 1 部分基本上是联系信息,您填写您的姓名、公司、地址等。非常简单。
第 2 部分与第 1 部分基本相同,但它是一个可供您选择的选项列表。您在第 2 节中所做的更改,在第 4 节中更改了某种形式的控件。例如,如果我有一个下拉菜单显示“使用公制而不是英语转换”,那么第 4 节将有不同的单位。
第 3 节很简单,第 4 节是一个网格。
现在,我的所有组件都已启动并运行,但现在我无法找到一种方法来查看我的 react 组件的所有状态,并将数据冒泡给父母,然后再提交表单.
所以这是我所说的层次结构:
- ReactJS 根节点
- ReactJS Section1 节点
- 呈现:5 个 html 输入框
- ReactJS Section2 节点
- ReactJS dropdown1 节点
- 渲染:选择下拉菜单(在 componentDidMount 上使用 select2.js)
- ReactJS dropdown2 节点
- 渲染:选择下拉菜单(在 componentDidMount 上使用 select2.js)
- ReactJS dropdown3 节点
- 渲染:选择下拉菜单(在 componentDidMount 上使用 select2.js)
- ReactJS dropdown4 节点
- 渲染:选择下拉菜单(在 componentDidMount 上使用 select2.js)
- ReactJS dropdown1 节点
- ReactJS Section3 节点
- ReactJS dropdown1 节点
- 渲染:选择下拉菜单(在 componentDidMount 上使用 select2.js)
- ReactJS dropdown1 节点
- ReactJS Section4 节点
- 渲染:表并创建用于本地存储的行(在 componentDidMount 上使用 datatables.js)
- ReactJS Section1 节点
我有一个提交按钮。我需要浏览不同文件中的所有这些部分,才能在此表单上提交所有收集的数据,但我很难找到最好的方法。
ReactJS 似乎在父子关系或子父子关系方面表现出色。但是,父母到孩子到孙子,或者孙子到孩子到父母到祖父母,这变得更难了。这似乎是疯狂的维护,特别是如果我想在这些部分之一中添加更新的嵌套组件。有没有一种方法可以让我在每个反应节点上附加某种机制,注册数据的这些状态,并允许提交按钮知道这种机制并随时提交?
我应该为此研究 Flux 吗?我有点开始了,但我发现自己认为将它添加到我的项目中会使事情变得比它需要的更复杂,我发现自己在兔子洞里走得更远。
或者我是否需要添加 AngularJS 之类的东西并将侦听器附加到我的所有字段?我见过AngularJS和ReactJS一起使用的项目,reactjs只用于渲染。
我碰巧读了这篇文章: http://ctheu.com/2015/02/12/how-to-communicate-between-react-components/
解释 3 种关系:
- 所有者到所有者(父母到孩子)
- 所有者到所有者(子到父)
- 它们不相关
对于第三个选项(这是我真正想了解的更多内容),他提到使用名为 PubSub(发布/订阅)的第 3 方库,这里有一个 javascript 库:
https://github.com/mroderick/PubSubJS
但我真的不确定这是否是最好的方法。
【问题讨论】:
-
Flux 可能会很好,这样您就不必管理顶级组件中的所有状态。
-
我一直在阅读有关 Flux 的更多信息,但对我来说似乎太多了。它在很大程度上依赖 Nodejs 作为他们所有教程的要求,所以这让我相信它与你使用的那种 Web 服务器高度耦合。 ReactJS 是一个不干扰的库,Flux 似乎肯定会干扰我所拥有的。
-
Flux 只是您构建 React 代码的一种方式,它绝对不与服务器耦合。我认为您应该使用 Flux,在您的特定情况下,您将拥有一个
FormStore来保持所有部分的状态,以及一个顶部控制器将部分数据作为道具传递。当您点击“提交”按钮时,您无事可做,因为您的表单的当前状态(即用户输入的结果)已经保存在您的FormStore中。 -
正如其他人所提到的,我也强烈建议您进入 Flux。到最后,您将能够轻松地在一个地方管理应用程序状态。
-
例如,下拉菜单的更改事件触发
Action,它调用Dispatcher,然后在Store中听到,您将在其中保存状态。您的主应用程序 JS 文件与Store挂钩,因此每当Store发生变化时,它可以从Store获取所需的数据并使用props传递给子(和孙子)组件,即数据流动在一个方向。我发现 this article 是 Flux 的一个非常好的起点。
标签: reactjs