2015-02-23 13 views

cevap

8

Geri arama içeriğinizi (this) doğru şey olmaya zorlamak için bind() numaralı telefonu aramanız gerekir. Aksi takdirde, varsayılan olarak genel bağlamda çağrılır (görünüşe göre, jQuery bunu jqXHR nesnesinin bir bağlamı ile çağırır). bind(), işlevinizin bağlamını this'un olması gereken şekilde ayarlar. Eğer

success: function(data) { 
    this.setState({data: data}); 
    } 

belirtildiği gibi

+0

Üzgünüz bunu anlamadım. Lütfen detaylandırın – shubham

+2

Bağlamak istemezseniz, 'bu' geri aramada yanlış bir şey olacaktır. – Scimonster

1

@shubham, onun javascript sözdizimi, geri arama işlevi bu akım kullanmaya, bağlama birinci argüman() fonksiyonu işlevini çağırarak bu görevi görecek, yous geçmesi gerekir apply() ve call() fonksiyonları sizin için yararlı olacaktır. Ben Scimonster.bind() ile kabul

0

bu olması gerekiyordu ne olursa olsun için fonksiyonun içeriğini teşkil veya işlev böyle bir hata verecektir: Yakalanmayan TypeError: this.setState olmayan bir fonksiyonu

1

Kodunuzu React'dan aldığımı varsayalım. Çünkü yakın zamanda React ile ilgili benzer bir sorunla karşılaşıyorum.

Sorunuza geri dön. bind'un bir dönüşüm işlevi olduğunu düşünüyorum. , Sana bağlama işlevi ne olduğunu anlamak düşünüyorum ve neden bunu başarmak için bind kullanmak için öylesine gibi

componentDidMount: function() { 
$.ajax({ 
    url: this.props.url, 
    dataType: 'json', 
    cache: false, 
    success: function(data) { 
    this.setState({data: data}); 
    }.bind(this) 
}); 
}, 

: aşağıdaki gibi Kod:

componentDidMount: function() { 
var _this = this; 
$.ajax({ 
    url: this.props.url, 
    dataType: 'json', 
    cache: false, 
    success: function(data) { 
    _this.setState({data: data}); 
    } 
}); 
}, 

eşittir.