2016-03-22 82 views
0

我在應用程序中使用react-storage將我的狀態保存在本地存儲中。在試圖清除狀態,我這樣做:使用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

好吧,它看起來不像Redux使用存儲在localstorage中的狀態,除非它被告知使用engine.load()這樣做。這是一件好事。如果使用本地存儲意味着Redux不應將自己的狀態保留在內存中,而是始終從本地存儲中讀取,那麼對於性能來說這會很糟糕。 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(); 
    } 
});