2017-07-26 18 views
0

私のReactアプリケーションでは、APIからデータを取得した後に、私のreduxストアとlocalStorageにデータを保存しようとしています。私は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を入力すると、私はsetDataInLocalStorageに入り、myDataに入っていることがAPI呼び出しによって設定されていることがわかります。

私は何が間違っていますか?

答えて

2

dispatchは、返されるアクションオブジェクトを想定しています。この場合、setDataInLocalStoragedispatchの処理を返すことはありません。

我々は唯一のlocalStorageを設定したいので、我々はこれにディスパッチラインを変更することができますと呼ばれている通常の関数としての)我々は(setDataInLocalStorageを扱う

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

+2

他の方法ではありませんか? 'setDataInStore'は、要求を減速機に送るアクションオブジェクトを期待します。アクションオブジェクトを期待しない関数は 'setDataInLocalStorage'です。 – Sam

+0

偉大なキャッチ、あなたは100%右です。応答を書いて混ざり、私はそれを更新します! – dpaulus

+0

私はまだ 'myData'が' localStorage'に格納されていないという問題があります。私は 'setDataInLocalStorage'を打ち、' myData'もそこにあります。その行は正常に実行されているようですが、次回に 'localStorage'をチェックすると、私のデータはそこにありません。なぜデータが 'localStorage'に格納されていないのでしょうか? – Sam

関連する問題