2017-07-26 95 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