2017-05-10 3 views
0

Ich versuche Async-Post-Anfrage zu tun, um meine Daten nur nach Erfolg zu aktualisieren.wie Callback von Post-Anfrage in Reaktion mit Redux, Redux-Thunk und Axios reagieren?

was ich will, ist Versprechen Typ Sache in Aktion Anruf.

this.props.postAction('/event/user/44/post',data) 
.then((response) =>{ 
    console.log("Inside callback"); 
    console.log(response); 
}); 
export default connect({postAction})(EventFeed); 

hier ist meine Aktion Datei, wo ich mache Post-Anforderung

export const POST_ACTION = 'POST_ACTION'; 

export function postAction(url,data) { 
    return function(dispatch) { 
     axios({ 
      method:'post', 
      url:API_URL + url, 
      headers: {'event': 55}, 
      data: data, 
     }) 
    .then(response => { 
     dispatch({ 
     type: POST_ACTION, 
     payload: response.data 
     }); 
    }) 
    .catch((error) => { 
     console.log(error); 
    }) 
    } 
} 

Aber ich bin nie in Rückruf bekommen.

Jetzt, wie man Rückruf macht, um Daten von der Antwort zu erhalten ???

Antwort

2

Zunächst einmal sollten Sie nicht. Sie verletzen die ganze Idee hinter Unidirectional dataflow. Wenn Sie Redux verwenden, sollten Ihre asynchronen Inhalte nur im Aktionsersteller behandelt werden, es werden Aktionen mit potentieller Datennutzlast ausgelöst, der Speicher wird aktualisiert und die App wird erneut gerendert. Wenn du über eine Verheißung auszustrecken und "zurück" zu ketten, verstößt du gegen diesen Fluss.

Mit dieser Warnung gesagt, Sie geben nicht das Versprechen von Ihrem Thunk zurück. Sie sollten auch Ihre Antworten zurückgeben, wenn Sie dann verketten. MDN

export function postAction(url,data) { 
    return function(dispatch) { 
     //You need to return your promise. 
     return axios({ 
      method:'post', 
      url:API_URL + url, 
      headers: {'event': 55}, 
      data: data, 
     }) 
    .then(response => { 
     dispatch({ 
     type: POST_ACTION, 
     payload: response.data 
     }); 
     return response; 
    }) 
    .catch((error) => { 
     console.log(error); 
    }) 
    } 
} 

Vielleicht https://codereview.stackexchange.com/ ist ein besserer Ort für ond Arten von Fragen.

Verwandte Themen