Javascript 修改localStorage时MapStateTops不更新道具

Javascript 修改localStorage时MapStateTops不更新道具,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个需要身份验证的redux应用程序。现在,我正在尝试确保应用程序确保用户在应用程序中执行应用程序时仍然登录。以下是我的App.jsx文件的底部: function mapStateToProps({ offline, user }) { return { // we use this to know if we should redirect to auth pages // we don't want logged in users to be h

我有一个需要身份验证的redux应用程序。现在,我正在尝试确保应用程序确保用户在应用程序中执行应用程序时仍然登录。以下是我的App.jsx文件的底部:

function mapStateToProps({ offline, user }) {
    return {
        // we use this to know if we should redirect to auth pages
        // we don't want logged in users to be hitting these static pages
        loggedIn: !!user.token,
        offline,
    };
}

const ConnectedApp = connect(mapStateToProps)(App);

export default ConnectedApp;
我通过chrome开发者工具清除站点本地存储来测试此功能。然后在站点上执行操作。我放置了许多不同的日志语句。我发现正在调用
mapstatetops
,但是道具没有改变。应用程序仍然认为用户仍然登录,并且状态没有改变


我一直在关注我能找到的所有在线资源,但似乎没有任何帮助。我遗漏了什么吗?

这是因为
mapState
仅在将操作分派到Redux存储时重新运行,并因此计算出新的存储状态。修改本地存储不涉及调度Redux操作,因此您的
mapState
将永远不会运行


不要依赖于
mapState
函数中
localStorage
的值-它们应该只从
state
参数中提取值,然后返回这些值。

这是因为
mapState
只有在将操作调度到Redux存储时才会重新运行,并因此计算出新的存储状态。修改本地存储不涉及调度Redux操作,因此您的
mapState
将永远不会运行


不要依赖于
mapState
函数中
localStorage
的值-它们应该只从
state
参数中提取值,并返回这些值。

因此,如果我需要能够检测到localStorage何时被修改,是否可以使用mapState?或者我应该回到vanilla JS?@poctorDepper42为什么要检测本地存储的更改?不,
mapState
不能也不应该与
localStorage
@EmileBergeron有任何关系,在我分配的任务中,有人描述说如果有人清除了他们的站点数据,应该检测到该问题,以便可以注销它们。redux状态是否与站点数据分开?如果是这样的话,那么整个事情就是一个打击是的,Redux存储本身也与
localStorage
无关。最常见的用法是基于某些存储更新将Redux存储状态序列化为
localStorage
,或者反序列化该存储状态以在应用程序加载时初始化存储。基于,看起来您需要侦听外部应用程序代码中的“存储”事件,并在发生这种情况时发送一个操作以清除Redux存储。因此,如果我需要能够检测本地存储何时被修改,是否可以使用mapState?或者我应该回到vanilla JS?@poctorDepper42为什么要检测本地存储的更改?不,
mapState
不能也不应该与
localStorage
@EmileBergeron有任何关系,在我分配的任务中,有人描述说如果有人清除了他们的站点数据,应该检测到该问题,以便可以注销它们。redux状态是否与站点数据分开?如果是这样的话,那么整个事情就是一个打击是的,Redux存储本身也与
localStorage
无关。最常见的用法是基于某些存储更新将Redux存储状态序列化为
localStorage
,或者反序列化该存储状态以在应用程序加载时初始化存储。基于,看起来您需要侦听外部应用程序代码中的“存储”事件,并在该事件发生时发送一个操作以清除Redux存储。当您清除本地存储时,用户令牌已在内存中。当您清除本地存储时,用户令牌已在内存中。