2016-11-11 22 views
6

Merhaba arkadaşlar tepki vermek için yeni ve belirli bir projeye takılıyorum. Sorun şu ki, bir ana bileşenden alınan bu.props bir api_urlin var. Ve bu alt bileşende JSON kullanarak bazı verileri almak için api_url kullanmak istiyorum. ebeveyn bileşeninde Reaksiyona girerek this.props dosyasına erişme ComponentDidMount

i

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

varsa ve çocuk bileşeninde i

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"]); 
     } 

    }); 
} 

gibi bir şey yani ne ihtiyacım $ .getJSON url bölümündeki ilgili api_url olduğunu istiyorum .

componentDidMount içindeki this.props dosyasına erişmenin bir yolu var mı, yoksa aynı sonuçları elde etmenin başka bir yolu var mı?

Bununla ilgili başka bir şey de, ana bileşenin ComponentDidMount öğesinde bir $ .getJSON çağrısı kullanmamdır. Şimdiden teşekkürler. Eğer çocuk bileşeninde bir yapıcı oluşturmak ve sonra

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"]); 

     } 

    }); 

    } 

olarak super() işlevine bir özellik olarak sahne geçmesi gerekiyor çocuk bileşeninde Dikmeler erişmek için

+2

Tam olarak anladığımdan emin değilim ... this.props tüm sınıfta kullanılabilir. Yani kodun iyi. –

+0

Zaten, '$ .getJSON' içinde demek istiyor musunuz? –

+0

Kodunuz çalışıyor - http://jsbin.com/wirodemulu/edit?html ,jsconsconsole, çıkış - eğer buna erişmek istiyorsanız '$ .getJSON'daki geri arama işlevinden' .bind() 'işlevini kullanmanız gerekir. –

cevap

1

Bunu yaptığınızda yapabilirsiniz tüm çocuk bileşeninize erişim erişim bilgileri

+1

Daha önce aynı şeyi denedim ve bu.props.api_url konsoluna oturum açtığımda undefined döndü –

+0

Ebeveyn bileşeninde this.state.objs.repos_url değerinin olup olmadığını kontrol edin –

-1

Yapıcınıza this.componentDidMount = this.componentDidMount.bind(this); eklemeye çalıştınız mı? Bu şekilde componentDidMount'dan this'a ulaşabilirsiniz.

+0

Gerekli değil. ComponentDidMount, bir tepki yaşam döngüsü işlevidir ve bu nedenle zaten bağlamla bağlanır. bind() özel işlevler için gereklidir –

+0

Beni düzeltdiğiniz için teşekkür ederiz! –

1

Ajax çağrınızın içindeki this ile ilgili bir sorunla karşılaşabilirsiniz. Tahminimce this'u Depolarınızda bağlamanız gerekir, böylece ajax çağrınızdaki this örneği, ajax nesnesine değil, Depolara başvurur. senin sınıfında

0

yapıcı uygulamak: Muhtemelen bu tepki sürümü de

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

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

bunu elde etmek için daha kolaydır.

+0

Bu bana hata attı, ancak bunu içinde this.props.nameOfProp olarak adlandırırsam çalışır. –

İlgili konular