2017-07-26 93 views
0

在我的React應用程序中,從API中獲取一些數據後,我試圖將數據存儲在localStorage以及我的redux存儲中。我不斷收到嘗試將數據保存到localStorage

Error: Actions must be plain objects. Use custom middleware for async actions.

這裏是我的代碼:

export const setDataInStore = (myData) => { 

    return { 
     type: types.SET_MY_DATA, 
     myData 
    }; 
} 

const setDataInLocalStorage = (myData) => { 

     window.localStorage.myData = myData; 
} 

export const getMyData =() => { 

    return (dispatch) => fetch('/api/mydata', fetchOptionsGet()) 
     .then((response) => { 
      if (response.ok) { 
       parseJSON(response) 
        .then(myData => { 

         dispatch(setDataInStore(myData)); 
         dispatch(setDataInLocalStorage(myData)); 
        }) 
      } else { 
       // Handle error 
      } 
     }) 
} 

的問題是與setDataInLocalStorage功能。當我把debuggers,我看到我進入setDataInLocalStoragemyData由API調用填充。

我在那裏做錯了什麼?

回答

2

dispatch預計將返回一個操作對象。在這種情況下,setDataInLocalStorage不會返回dispatch的任何操作。作爲一個經常被調用函數

dispatch(setDataInStore(myData)); 
setDataInLocalStorage(myData); 

我們對待setDataInLocalStorage():

由於我們只需要設置本地存儲,我們可以派遣線更改爲這。

+2

難道不是相反嗎? 'setDataInStore'的確期待一個動作對象,然後將請求發送給reducer。不期待動作對象的函數是'setDataInLocalStorage'。 – Sam

+0

很棒,你100%正確。寫了迴應後,我就更新了! – dpaulus

+0

我仍然存在的問題是'myData'沒有存儲在'localStorage'中。我打了'setDataInLocalStorage'並且'myData'也在那裏。該行似乎執行正常,但下次我檢查'localStorage',我的數據不在那裏。任何想法爲什麼數據不被存儲在'localStorage'中? – Sam