2015-11-18 41 views
24

将反应与redux一起使用时,是否可以将本地状态存储在state对象中?通过行为将所有内容存储在状态树中很快变得单调乏味。感觉有些状态仅适用于应用程序的展现/展示,而不是逻辑。通过演示我的意思是动画/闪烁,面板的扩展/缩小状态,表格中的排序标准等等。处理反应和还原中的本地状态

回答

13

这很难回答,因为不同的人会将组件的不同部分归类为“状态”。

由于Redux与应用程序状态有关,作为经验法则,任何您期望应用程序级别“撤消/重做”按钮生效的内容都应该作为Redux操作发生。 Redux有一个撤销存储插件的事实可能只是因为应用程序状态的范围。

当然,一些动画不可撤销,因为这些动画应该真的与应用程序状态中的变化相关联,而不是自己改变。尽管如此,其余的例子听起来很像应用程序状态。如果我排序了一个表格,然后按下撤消,我绝对期望排序被撤消。

+2

我喜欢将应用程序状态用于您希望能够撤消的事情的建议。 – aviemet

+0

什么时候我想要做类似改变类名时滑动元素做一些动画?这个东西应该还在redux行动中吗? –

5

正如Tyrsius已经提到的 - 对此有不同的看法。

对于我们 - 作为一个经验法则 - 我们确保跟踪应用程序状态的所有内容,我们希望能够看到我们是否能够远程连接到某些用户当前会话。

如果我们不在意是否鼠标悬停在某个元素上,我们可能只会使用组件状态(如果我们需要状态的话)。

尽管我们在脚本中只有一些这样的情况,但我们想知道用户在大多数情况下看到的更容易调试的情况。

您提到了面板的展开/折叠状态 - 我们有时会为我们创建处理这种展开/折叠逻辑的组件,所以我们不必为我们创建的每个面板都编写这样的缩减器。

我们可以利用这些组件是这样的:

<Panel id="somePanelId">some content</Panel> 

面板组件将确保应用程序状态中跟踪板激活状态。这样,保持代码简单并且不会让它爆炸是非常容易的。

+1

这个看起来好像是一个例子。我不确定你的意思是让组件跟踪应用程序状态中的状态而不使用reducer – Tyrsius

+1

组件确实有它自己的reducer,并根据你如何与它进行交互来分派动作。 一个切换例如调度一个动作,该动作将id为“props.id”的toggle的可见性设置为“props.active”,该属性为true或false,并且切换通过mapStateToProps连接到状态。 给定组件的状态是通过state.toggles [props.id]提取的。 –

+0

组件减速器如何连接到主存储减速器? – Tyrsius

7

现在这是回答在redux FAQs

有这个没有“正确”的答案。有些用户更喜欢在Redux中保留每一个数据片段,以便始终保持其应用程序的完全可序列化和受控版本。其他人更喜欢在组件的内部状态内保持非关键或UI状态,例如“当前打开的下拉列表”。

使用本地组件状态很好。作为一名开发人员,您的工作是确定组成您的应用程序的状态以及每个州应该在哪里生活。找到适合你的平衡点,并与之配合。