从连续反应中读取会话存储的变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从连续反应中读取会话存储的变化相关的知识,希望对你有一定的参考价值。

从反应应用程序中识别会话存储值更改的最佳方法是什么?基于哪个状态应该更新?

而不是连续循环和检查有没有更好的方法来实现这一点而不会失去性能。

答案

如果存储中的值发生更改,它会自动传播到使用此值的组件。这是因为组件在传递新值时会重新呈现。

例如:如果你的存储中有一个类似session.isAuthenticated的值,并且当你调用App动作时Logout组件使用该值来显示或不显示logout按钮,这将修改值,这样就不会显示Logout按钮了。

另一答案

首先,没有针对您的问题的纯javascript解决方案,因为在here中,它明确指出:

只要对Storage对象进行了更改,就会触发StorageEvent(请注意,对于sessionStorage更改,不会触发此事件)。这不适用于进行更改的同一页面 - 它实际上是域中其他页面使用存储同步任何更改的方式。其他域上的页面无法访问相同的存储对象。

假设你的应用程序纯粹是在React中,并且在React部件之外没有对sessionStorage进行更新,请考虑以下脏选项:

1.让减速器完成工作:reducer接收带有完整数据的动作,在更新状态之前,它首先更新sessionStorage。例:

const someReducer = (state, { type, payload}) => {
    switch (action.type) {
        ... 
        case 'UPDATE_SESSIONSTORAGE_AND_STATE':
            sessionStorage.setItem('itemName', state.payload);
            ... // and do normal state-updating job here
        ...
    }
}

2.使用redux-saga:将数据传递给一个动作,例如UPDATE_SESSIONSTORAGE并让一个传奇处理存储更新。那个传奇可以发动另一个动作,例如UPDATE_STATE将相同的数据发送到相应的reducer。

以上是关于从连续反应中读取会话存储的变化的主要内容,如果未能解决你的问题,请参考以下文章

PHP 无法从 NFS 共享读取会话

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式

表值在反应中没有变化

mysql pdo 事务和会话存储

从 Python 并行批量读取文件