React.js:将整个状态同步到 localStorage

Posted

技术标签:

【中文标题】React.js:将整个状态同步到 localStorage【英文标题】:React.js: Syncing entire state to localStorage 【发布时间】:2014-03-11 14:15:53 【问题描述】:

我想将我的应用程序状态存储在 localStorage 中。是否有回调或状态更改触发的事件?我会用它来打电话给localStorage.state = JSON.stringify(this.state)。可能会使用 0.5 秒限制。

TodoMVC React examples 使用 localStorage 作为存储。但是,它定义了事件处理程序中的保存和删除,例如keydownclick。就我而言,这样做会产生很多样板文件。

【问题讨论】:

【参考方案1】:

componentDidUpdate 生命周期方法中,您可以序列化状态:

componentDidUpdate: function(prevProps, prevState) 
    localStorage.state = JSON.stringify(this.state);

每次组件重新渲染时都会运行该代码(每次道具或状态更改都会发生这种情况)。

【讨论】:

这适用于单独的 React,对于任何尝试使用 React+Flux 执行此操作的人请记住,您还需要保持 Store 与此同步。在这种情况下,您可以从 localStorage.state 初始化每个 Store 的状态,或者您可以单独缓存每个 Store 的数据。 这正是我遇到的问题@@***.com/questions/28375718/… 这是一个 fiddle 在基于 React 的 TODO MVC 示例中的工作。 如果您评估设计选项,下一个重要的点是众所周知的stringify 的性能影响。您可能会考虑使用一些逻辑来减少stringify 调用的数量。干杯!

以上是关于React.js:将整个状态同步到 localStorage的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React JS 中渲染之前等待状态?

React Js - Flux 中的状态管理

React Js使用onChange将数组内的值更新到子组件

React JS:数组未传递给状态

React.js学习之理解JSX和组件

React.js useState hook 导致过多的重新渲染并且无法更新我的状态