2016-11-11 13 views
6

Witajcie, jestem nowy, aby zareagować i utknąłem w pewnym projekcie. Chodzi o to, że mam api_urlin this.props otrzymane od komponentu nadrzędnego. W tym komponencie potomnym chcę użyć api_url do pobrania niektórych danych przy użyciu JSON.Uzyskiwanie dostępu do this.props in w reagowaniu ComponentDidMount

W komponentu macierzystego mam

Repositories api_url={this.state.objs.repos_url} 

aw składniku dziecka, chcę coś

componentDidMount() { 

    $.getJSON(this.props.api_url, function(json) { 
     for (var i = 0; i < json.length; i++) { 
      var each_repo = json[i] 
      console.log(each_repo["name"]); 
     } 

    }); 
} 

więc to, co jest mi potrzebne odpowiedni api_url w sekcji url $ .getJSON .

Czy istnieje sposób dostępu do this.props w componentDidMount lub czy jest jakiś inny sposób uzyskania tych samych wyników?

Inną rzeczą związaną z tym jest to, że im również za pomocą wywołania $ .getJSON w ComponentDidMount elementu nadrzędnego. Z góry dzięki.

+2

Nie jestem pewien, aby w pełni zrozumieć ... ten.props jest dostępny w całej klasie. Twój kod jest OK. –

+0

Już możesz, masz na myśli wewnątrz '$ .getJSON'? .. –

+0

Twój kod działa - http://jsbin.com/wirodemulu/edit?html,js,console,output - jeśli chcesz uzyskać dostęp do' this' z funkcji wywołania zwrotnego w '$ .getJSON' należy użyć' .bind() '. –

Odpowiedz

1

W celu uzyskania dostępu Rekwizyty w składniku dziecka trzeba utworzyć konstruktor w komponencie dzieci, a następnie przejść rekwizyty jako atrybut do funkcji super() jako

constructor(props) { 
    super(props); 
    this.state = {} 
} 
componentDidMount(){ 

    $.getJSON(this.props.api_url , function(json) { 
     for (var i = 0; i < json.length; i++) { 
      var each_repo = json[i] 
     console.log(each_repo["name"]); 

     } 

    }); 

    } 

Po wykonaniu tej czynności można rekwizyty dostępu w całym składniku podrzędnym

+1

Próbowałem już tej samej rzeczy, która jest niezdefiniowana, gdy zalogowałem to.props.api_url do konsoli. –

+0

Sprawdź, czy wartość this.state.objs.repos_url w składniku macierzystym –

-1

Czy próbowałeś dodać this.componentDidMount = this.componentDidMount.bind(this); do swojego konstruktora? W ten sposób można uzyskać this z componentDidMount.

+0

Nie jest wymagana. ComponentDidMount to funkcja cyklu życiowego reagowania i dlatego jest już powiązana z kontekstem. Funkcja bind() jest wymagana przy niestandardowych funkcjach –

+0

Dzięki za poprawienie mnie! –

1

Prawdopodobnie masz problem z this wewnątrz połączenia ajax. Domyślam się, że musisz połączyć this w swoich repozytoriach, aby instancja this w twoim wywołaniu ajaxowym odnosiła się do repozytoriów, a nie do obiektu ajax.

0

W swojej klasie wdrożyć konstruktora:

constructor(props){ 
    super(props); 
    this.state = { 
    //states 
    }; 
} 

componentDidMount(){ 
    //Get this.props 
    console.log(this.props.nameOfProp); 
}; 

Prawdopodobnie w tej wersji reakcji jest łatwiej je zdobyć.

+0

To wyrzuć mi błąd, ale jeśli zadzwonię do tego.props.nameOfProp wewnątrz render działa. –

Powiązane problemy