2015-03-17 12 views
20

Wywoływam kolekcję elementów wejściowych dla obiektów w tablicy.Jak przekazywać wiele parametrów do wejściowego narzędzia zmiany na Zmień

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 
} 

pozwala mi pisać onChange funkcję obsługi:

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

ale w tym obsługi muszę identyfikator obiektu Range chcę zmienić. Więc mogę zmienić zmiany jak tworzę elementów wejściowych w renderowanie funkcję i zmienić:

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

Teraz moja obsługi otrzyma range.id jako parametr, ale teraz nie mam wartość newname. Mogę go za pomocą bibl

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

Jest to jedyne rozwiązanie wiem, ale podejrzewam, że nie ma lepszego.

+0

Po prostu zastanawiam się, czy nie wiąże się z właściwością antypoślizgowy wzór w React? – user2891491

Odpowiedz

28

event argumentem jest nadal przekazywana, ale rangeId argumentem jest dołączany do listy argumentów, więc metoda changeRangeName wyglądałby

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

Zobacz Function.prototype.bind()

+0

Teraz, kiedy czytam dokumentację, widzę ją :) Dzięki. –

+0

uratowałeś mój dzień! – Jules

26

myślę w ten sposób jest łatwiej:

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

Dzięki, podobało mi się robienie tego w ten sposób: 1) moje powiązanie było w konstruktorze 2) Jest bardziej czytelne. – runios

+0

Zgadzam się, że jest to bardzo czytelne. Ale ta implementacja daje ostrzeżenie w przeglądarce: "Komponent zmienia niekontrolowane wejście tekstu tekstowego, który ma być kontrolowany Elementy wejściowe nie powinny przełączać się z niekontrolowanego na kontrolowany (lub odwrotnie) Zdecyduj się na użycie kontrolowanego lub niekontrolowanego elementu wejściowego przez cały okres użytkowania komponentu. " Wszelkie przemyślenia na temat tego, jak uniknąć tego ostrzeżenia? –

Powiązane problemy