2017-06-11 99 views
0

從終極版本地文件讀取JSON數據例如有JSON數據的一些txt文件:我如何通過行動

"assets": [ 
      {  
       "id": 1, 
       "name": "Mike", 
       "contract": "N23421", 
       "about": teacher  
      }, 
      { 
       "id": 2, 
       "name": "Helen", 
       "contract": "N43212", 
       "about": teacher 
      } 
     ] 

平時我上傳/使用終極版解析來自服務器的該文件。

那時我需要從本地存儲上傳相同的文件。 那麼,我如何通過使用本地文件的Actions和Reducers來做到這一點? 我將不勝感激任何幫助或建議。

回答

2

我會建議使用一些本地存儲中間件,類似於redux-api-middleware的工作方式。除非您不從服務器獲取數據,否則您只需從本地存儲中檢索數據。這很容易擴展以保存數據。這裏的想法是,您將根據您所處的請求的階段發送不同的操作。

例如,

LOCAL_STORAGE_RETRIEVE_PENDING 
LOCAL_STORAGE_RETRIEVE_SUCCESS 
LOCAL_STORAGE_RETRIEVE_FAILURE 

成功操作將包含檢索到的JSON數據。

或者,您可以直接在您的動作創建者中訪問本地存儲。

這是用打字機寫的一個非常簡單的例子。您還需要添加一個對調度操作進行適當響應的Reducer。注意這個例子的工作,你需要添加redux-thunk中間件。

const localStorageRequest =() => ({ 
    type: 'LOCAL_STORAGE_REQUEST' 
}); 

const localStorageDataRetrieved = (data) => ({ 
    type: 'LOCAL_STORAGE_DATA_RETRIVED' 
    data, 
}); 


export const getDataFromLocalStorage = (key: string) => (dispatch: Dispatch<any>) => { 
    // This action might be used to change some state to pending or fetching. 
    dispatch(localStorageRequest()); 
    const data = localStorage.getItem(key); 
    dispatch(localStorageDataRetrieved(data)); 
}; 

現在,更簡單的解決方案就是在您的動作創建者中完成此操作。隨着應用程序的增長,您可以稍後添加中間件。

+0

感謝的建議,但你能解釋是如何工作的你'常量localStorageDataRetrieved =(數據)=>({ 類型: 'LOCAL_STORAGE_DATA_RETRIVED' 數據, });'我就明白'數據:payload.data '? – vvn92

+0

@ vvn92數據將是從本地存儲中檢索並作爲參數傳入的值。在這個例子中,我使用了es6中的一個屬性值簡寫。當屬性名稱與值名稱匹配時,可以省略屬性名稱。有關更多信息,請參閱https://www.eventbrite.com/engineering/learning-es6-enhanced-object-literals/。 – Nick