2017-01-06 1 views
0

Ich habe Benutzer und Orte als zwei verschiedene Datenbanken, wo jeder Benutzer hat Orte.Richtiger Weg zum Abrufen von Daten - Reagieren

Ich habe BasicInfo Komponente wo zu einer Zeit 1 Ort des Benutzers geladen werden muss.

ComponentWillMount von BasicInfo

componentWillMount() { 
    this.props.dispatch(fetchUser())   
    this.props.dispatch(fetchPlaces(1)) 
} 

Ich brauche in fetchPlaces Benutzer-ID zu übergeben, wie der jetzt bin ich hartzucodieren, aber wie mache ich mit den Ergebnissen der fetchUser? Sollte ich in componentWillReceiveProps(nextProps) tun? Oder gibt es einen anderen Weg?

componenetWillReceiveProps macht Sinn, aber ich frage mich, was ist, wenn es eine Kette von Ereignissen ist? Kann abhängig von der Orts-ID sein, wenn ich andere Daten holen muss.

Aktionen:

export function fetchPlaces(user_id) { 
 
    return function(dispatch) { 
 
    axios.get("/getPlaces?user_id=" + user_id) 
 
     .then((response) => { 
 
      console.log(response); 
 
     dispatch({type: "FETCH_PLACES_FULFILLED", payload: response.data}) 
 
     }) 
 
     .catch((err) => { 
 
     dispatch({type: "FETCH_PLACES_REJECTED", payload: err}) 
 
     }) 
 
    } 
 
} 
 

 
export function fetchPlace(place_id) { 
 
    return function(dispatch) { 
 
    axios.get("/getPlace?place_id=" + place_id) 
 
     .then((response) => { 
 
      console.log(response); 
 
     dispatch({type: "FETCH_PLACES_FULFILLED", payload: response.data}) 
 
     }) 
 
     .catch((err) => { 
 
     dispatch({type: "FETCH_PLACES_REJECTED", payload: err}) 
 
     }) 
 
    } 
 
}

Antwort

1

Sieht so aus, als ob Sie bereits redux-thunk verwenden? Wenn ja, können Sie das Versprechen von Ihrem axios.get zurückkehren() ruft:

return axios.get(...); 

... dann kann man so etwas tun (ich nehme an, was Ihr fetchUser und user aussehen könnte):

this.props.dispatch(fetchUser()).then(user => this.props.dispatch(fetchPlaces(user.id))) 
+0

Danke Jeff. Ich glaube also, dass es keine Möglichkeiten gibt, Daten von ComponentWillMount weiterzugeben, weil sie keine richtigen Requisiten erhalten. –

+0

Aber in diesem Fall, jedes Mal, wenn ich Benutzer bekommen muss, Orte und Ort richtig? –

+1

Ihre Requisiten sind in componentWillMount() verfügbar. Wenn Ihre Komponente beispielsweise eine "userId" -Eigenschaft hat, können Sie sie als this.props.dispatch übergeben (fetchUser (this.props.userId) ... –

1

Sie einen Thunk oder ein Versprechen Middleware nutzen können. Sie können die Motivation und Beispiele in der documentation finden.

+0

Dank @R. Haluk –

Verwandte Themen