假设我在组件“ App”的状态下有一个小对象。 因此,要将状态保存在redux中,为什么不能将其保存在会话存储中?这有什么实质的区别吗?
答案 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.state
和render()
中读取内容。
答案 3 :(得分:0)
浏览器存储只允许与字符串值关联的键,没有什么复杂的,因此,仅用于从本地/会话中传入和传出不同类型的数据所需的代码都是讨厌的。
Redux的“存储状态”部分确实是最不有趣的部分。 Redux的重要部分是使用动作和化简器的模式,组件可以订阅这些状态更改,因此,如果化简器更新状态,则使用该组件的组件将自动重新呈现。使用浏览器存储技术实际上只能解决“状态在哪里”部分。您仍然需要机制来更新该状态,并让组件知道在状态更新时重新呈现
会话存储也可能为零,例如,简单地在Safari(包括iOS)中使用私有浏览模式会将存储配额设置为零
还为React应用程序处理localStorage和sessionStorage,将其视为状态。它是代码库中最容易出错,不可预测,引起头痛的代码。
如果您仍想使用它们,还可以使用redux-locastorage将存储保存到本地存储,或使用redux-sessionstorage保存到会话存储