为什么要使用Redux而不是会话存储

时间:2019-07-07 15:21:06

标签: html reactjs browser react-redux

假设我在组件“ App”的状态下有一个小对象。 因此,要将状态保存在redux中,为什么不能将其保存在会话存储中?这有什么实质的区别吗?

4 个答案:

答案 0 :(得分:0)

仅通过更改会话存储就不会重新呈现您的组件, 但是,如果该组件已连接到redux,则会通过更改redux状态来实现。

答案 1 :(得分:0)

Redux允许任何组件“连接”到状态,并知道任何状态更改并相应地更新。使用会话存储时,无法轻松使组件知道状态,因此无法以最佳方式使用反应。

此外,与更新Redux存储区相比,写入和读取会话存储区的成本更高/效率更低。

会话存储速度:Speed of sessionStorage

答案 2 :(得分:0)

您可以这样做。

区别是

React足够聪明,可以在使用DOM时更新state,并使用state更新setState。当您在React应用中使用setState时,它只是重新渲染您的组件,并且如果您在组件中使用该状态值来显示某些值/数据,这些值/数据将在您的组件上更新。

当您将数据存储在sessionStorage中时,您的应用将不会reacts自动更改sessionStorage的值。在这种情况下,您的组件将不会重新呈现,并且您的更改不会在您的组件上更新。 但是对于这种情况,您有一个名为forceUpdate()

的解决方案

从文档中

  

调用forceUpdate()将导致在组件上调用render(),而应跳过shouldComponentUpdate()。这将触发子组件的正常生命周期方法,包括每个子组件的shouldComponentUpdate()方法。如果标记发生更改,React仍然只会更新DOM。

尽管您拥有forceUpdate,但通常应避免使用forceUpdate(),而只能从this.props中的this.staterender()中读取内容。

答案 3 :(得分:0)

浏览器存储只允许与字符串值关联的键,没有什么复杂的,因此,仅用于从本地/会话中传入和传出不同类型的数据所需的代码都是讨厌的。

Redux的“存储状态”部分确实是最不有趣的部分。 Redux的重要部分是使用动作和化简器的模式,组件可以订阅这些状态更改,因此,如果化简器更新状态,则使用该组件的组件将自动重新呈现。使用浏览器存储技术实际上只能解决“状态在哪里”部分。您仍然需要机制来更新该状态,并让组件知道在状态更新时重新呈现

会话存储也可能为零,例如,简单地在Safari(包括iOS)中使用私有浏览模式会将存储配额设置为零

还为React应用程序处理localStorage和sessionStorage,将其视为状态。它是代码库中最容易出错,不可预测,引起头痛的代码。

如果您仍想使用它们,还可以使用redux-locastorage将存储保存到本地存储,或使用redux-sessionstorage保存到会话存储