Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用redux存储重置存储在本地存储中的状态时出现问题_Reactjs_Redux_Local Storage_Redux Storage - Fatal编程技术网

Reactjs 使用redux存储重置存储在本地存储中的状态时出现问题

Reactjs 使用redux存储重置存储在本地存储中的状态时出现问题,reactjs,redux,local-storage,redux-storage,Reactjs,Redux,Local Storage,Redux Storage,我正在应用程序中使用react存储将我的状态保留在本地存储中。为了清除状态,我执行以下操作: import createEngine from 'redux-storage-engine-localstorage' const engine = createEngine('my-save-key'); ... engine.save({}) .then( () => { dispatch({type: 'SOME_ACTION'}) }) ... engine.save({})理

我正在应用程序中使用react存储将我的状态保留在本地存储中。为了清除状态,我执行以下操作:

import createEngine from 'redux-storage-engine-localstorage'
const engine = createEngine('my-save-key');

...

engine.save({})
.then( () => {
  dispatch({type: 'SOME_ACTION'})
})
...
engine.save({})
理论上应该将本地存储中的状态保存到一个空对象。完成后,我希望下一个已调度操作的前一个状态是该空对象。但是,在
中调度的操作仍然引用旧状态,就好像从未重置状态一样


另外,我一直在尝试使用localStorage.clear()重置状态,但我遇到了同样的问题。关于可能出现的错误以及我如何解决这一问题,您有什么想法吗?

嗯,看起来Redux不会使用存储在localstorage中的状态,除非告诉它使用
引擎.load()
。这是件好事。如果使用localstorage意味着Redux不应该在内存中保留自己的状态,而是始终从localstorage读取,那么这对性能来说将是可怕的
engine.save()
似乎对实际的redux状态没有任何作用,它只是将localstorage值设置为您以后可以加载的值,例如下次启动应用程序时

engine.load()
通常用于获取应用程序的初始状态,然后随时使用
engine.save()
对当前状态进行快照,以便在以后重新生成。
save()
load()
的源代码应该是不言自明的:

export default (key) => ({
    load() {
        let jsonState;

        try {
            jsonState = localStorage.getItem(key);
        } catch (err) {
            return Promise.reject(err.message);
        }

        return Promise.resolve(JSON.parse(jsonState) || {});
    },

    save(state) {
        const jsonState = JSON.stringify(state);

        try {
            localStorage.setItem(key, jsonState);
        } catch (err) {
            return Promise.reject(err.message);
        }

        return Promise.resolve();
    }
});