2015-03-17 20 views
20

Dizideki nesneler için girdi öğeleri koleksiyonu oluşturur.Girdinin onChange işleyicisine birden çok parametre iletme

changeRangeName: function (event) { 
    var newName = event.target.value; 
}, 

ama bu işleyicisinde ben değiştirmek istiyorum aralığı nesnesinin id gerekir:

render: function() { 
    var ranges = []; 
    this.props.ranges.map(function(range, index) { 
     var rangeElement = <Input type="text" 
      value={range.name} onChange={this.changeRangeName.bind(this)} /> 
     ranges.push(rangeElement); 
    }, this); 

    // render ranges 
} 

bu beni onChange işleyici işlevi yazmasına olanak tanır. Bu yüzden ben fonksiyonunu ve değişim işlemek giriş öğeleri oluşturmak nasıl değişiklik değişebilir:

var rangeElement = <Input type="text" 
      value={range.name} 
      onChange={this.changeRangeName.bind(this, range.id)} /> 

Şimdi benim işleyicisi parametre olarak range.id alacaksınız ama şimdi newName değeri yok.

var rangeElement = <Input type="text" 
      ref={'range' + range.id} 
      value={range.name} 
      onChange={this.changeRangeName.bind(this, range.id)} /> 

Buradaki tek çözüm budur, ancak daha iyi olduğunu sanıyorum.

+0

Sadece merak ediyorum, bir özellik içinde React içinde bir anti desen bağlamak değil mi? – user2891491

cevap

28

event argüman hala geçirilir ama rangeId argüman argümanlar listesinin başına ilave edilir, böylece changeRangeName yöntem bu şekilde daha kolay olduğunu düşünüyorum Function.prototype.bind()

+0

Şimdi belgeleri okuduğumda görüyorum :) Teşekkürler. –

+0

Günümü kurtardın! – Jules

26

Bkz

changeRangeName: function (rangeId, event) { 
    var newName = event.target.value; 
}, 

gibi görünecektir:

<Input type="text" 
       value={range.name} 
       onChange={(e) => this.changeRangeName(range.id, e)} 
     ... 
    onChange(id, e) { 
     ... 
    } 
+0

Teşekkürler, bunu şu şekilde yapıyordum: 1) Bağlamı yapıcıda 2) Daha okunabilir. – runios

+0

Bunun çok okunabilir olduğunu kabul ediyorum. Ancak bu uygulama, tarayıcıda şöyle bir uyarı veriyor: "Bir bileşen, kontrol edilecek tipte bir kontrolsüz metin girişini değiştiriyor. Giriş elemanları, kontrolsüzden kontrol edilene (veya tersi) geçiş yapmamalıdır. Kontrollü veya kontrolsüz bir giriş elemanı kullanma kararını verin. bileşenin ömrü boyunca. " Bu uyarının nasıl önleneceğine dair herhangi bir düşünce var mı? –

İlgili konular