2015-12-07 31 views
3

在找到egghead.io的迷你讲座系列后,我已经与REDX合作了一下。我试图理解REDX和this.state之间的区别以及何时适合使用哪一个。REDX vs this.state原生

在还原之前,我设置了一个全局容器组件,它承载了整个应用程序的状态。例如,当它从websocket接收到数据更改时,它将在适当的状态项上调用this.setState,触发对其子组件触发UI更改(例如将新的TODO添加到TODO列表中)。我发现REDX是一个很好的替代品。但是,当涉及到维持一种不同的状态 - 比如用户所在的状态时 - 我发现使用redux非常困难,因为我必须从本质上维护我自己的屏幕历史,而不受Navigator 。当嵌套的导航器也变得困难,并且不清楚应该将用户带回哪个状态。

我想知道什么是一些很好的经验法则或情况,在哪里适合使用this.state vs redux vs不手动保持状态(就像使用Navigator一样)。

+0

我想[这个SO帖子](https://stackoverflow.com/q/46639403/3694459)给出了一些关于redux状态与反应状态的更多信息。 – Balasubramanian

回答

9

一般来说,Redux位于您的“智能组件”的上方,仅为它们处理的全局应用程序状态提供位。我会说,通常情况下,人们总是将状态存储在他们的Redux存储中,除非使用的状态字面上是组件的功能内部,并且在其他地方永远不会使用。

这样做的一个示例可能是存储textInput字段的值,其中值本身不是其他组件的部分,可能是与其他值一起编译的,或者您只想让其他组件可用它符合一些长度要求或什么。在这种情况下,我最好将它存储在我的组件状态,然后最终将其存储在redux存储中。

状态存储“实施细则”我个人遵循:

  1. 只要一个值是任何感兴趣的应用程序的任何其他部分,可能是价值后,或将被传递到其他组件(聪明或愚蠢),它必须进入终极版
  2. 如果值是字面上废话到应用程序的其余部分,它MAY通过该组件的状态下内部管理的组成部分,直到它受上述限制。

关于你的导航仪的具体问题,不知道什么是“回”是,为什么没有实现,而不是你的route状态作为数组呢?您可以进一步编写包含navigatormapStateToProps函数的组件,以仅查看routes中的最后一项。

mapStateToProp(state) { 
    return { currentRoute: state.route && state.route[state.route.length-1] } 
} 
+0

感谢您的回答!在处理redux的经验中,“当前屏幕”状态还是导航历史记录状态是您保存在redux中的某个状态? – fanghai44

+0

你完全可以将“当前屏幕”保留在整个路由堆栈的旁边。它们不必相互排斥。看看[这个例子](https:// github。com/Qwikly/react-native-router-redux/blob/master/src/reducer.js) –

+0

当做动画时,不会有一个更好的保持组件状态的例子吗?根据实施方式的不同,一个组件可能会每秒更新60次或更多状态。 – Sawtaytoes