2017-05-23 9 views
0

Ich habe versucht, Redux in meine React App zu implementieren und this guide zu verwenden, um AJAX-Aufrufe zu tätigen.Reagieren Redux async Aktion

Example Actions Example Container

Mein Code ist auf seine fast identisch, außer ich den Fehler:

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

Ich habe seinen Code sah alles durch, und er ist nicht Middleware-Anwendung oder etwas zu tun, aus der üblichen

Meiner async Aktion

import axios from 'axios'; 

const GET_POSTS = 'GET_POSTS'; 
const getPosts =() => { 
    const request = axios.get('/url'); 
    return { type: GET_POSTS, payload: request }; 
}; 

Mein Container Nutzung

import { getPosts } from './actions'; 

//other stuff 

const mapDispatchToProps = dispatch => { 
    return { 
     getPosts:() => { 
      dispatch(getPosts()).then(response => { 
       console.log(response); 
      }); 
     } 
    }; 
}; 

//connect functions to component 

Meine Vermutung ist, dass sein Beispiel einfach nicht funktioniert? Ich habe überall nach Lösungen gesucht, und ich verstehe, dass der Versand zurückgibt, was auch immer die Funktion zurückgibt (was in diesem Fall kein Versprechen ist). Ich verstehe, dass ich eine Middleware verwenden muss, wenn ich möchte, dass die Funktion ein Versprechen zurückgibt. Ich bin nur verwirrt darüber, ob ich gerade etwas falsch mache (und was das ist), oder ob es sein Beispiel ist, dass es kaputt ist? Danke für die Hilfe

Antwort

3

In Guide Sie Middleware angewendet werden. Plese überprüfen 'STEP 8':

... 
import promise from 'redux-promise'; 
... 

//Configure middleware w/ redux-promise for AJAX requests 
const createStoreWithMiddleware = applyMiddleware(
    promise 
)(createStore); 
+0

Ich sehe es jetzt in der Speicherdatei: https://github.com/rajaraodv/react-redux-blog/blob/master/public/src/store/configureStore. prod.js Ich war verwirrt, weil ich dachte, dass Middleware während des Mähdreschers angewendet wurde. Vielen Dank! –

+0

Gern geschehen :) –

Verwandte Themen