2016-03-22 6 views
0

私はローカルストレージに自分の状態を保持するために、アプリケーションで反応ストレージを使用しています。redux-storageを使用してローカルストレージに格納された状態をリセットする際の問題

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

... 

engine.save({}) 
.then(() => { 
    dispatch({type: 'SOME_ACTION'}) 
}) 
... 

engine.save({})は理論的には空のオブジェクトに私のローカルストレージに状態を保存する必要があります状態を解除しようとする試みで、私はこれを行います。これが行われた後、次のディスパッチされたアクションの前の状態が空のオブジェクトであると思います。しかし、何らかの形で、.thenで送信されたアクションは、以前の状態を参照しており、状態がリセットされなかったかのようです。

また、localStorage.clear()を使って状態をリセットしてみましたが、同じ問題が発生しました。何が間違っているかもしれないかについてのアイデアと、これをどのように修正するか?

答えて

0

これは、engine.load()で指示されていない限り、Reduxはlocalstorageに保存されている状態を使用しているようです。それは良いことです。 localstorageを使用する場合、Reduxがメモリ内に独自の状態を保持するのではなく、常にlocalstorageから読み込むべきであることを意味する場合、それはパフォーマンスにとって恐ろしいことです。 engine.save()は、実際の還元状態では何もしないようですが、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(); 
    } 
}); 
関連する問題