2015-06-17 9 views
24

https://facebook.github.io/react/docs/update.htmlklucz Dynamiczny pomocnik w niezmienność aktualizacji dla tablicy

Mam funkcji aktualizacji, która odbiera indeks wraz ze zdarzeniem, tak aby zmienić wartość dla tego konkretnego elementu w tablicy.

Jak uzyskać ocenę index zamiast traktować ją jako klucz zestawu w tym scenariuszu? Czy to możliwe?

updateValue: function(index, e) { 
    var items = React.addons.update(this.state.items, { 
    index: { 
    amount: {$set: e.target.value} 
    } 
    }); 
    this.setState({ 
    items: items 
    }) 
} 

Teraz to oczywiście nie działa, ponieważ jest próbą zaktualizowania this.state.items['index']['amount'] który nie jest ustawiony, gdy chcę, aby zmodyfikować this.state.items[1]['amount'] dla indeksu 1.

Odpowiedz

35

można użyć ES6 computed property names, które wyglądają jak to z index zmiennej:

updateValue(index, e) { 
    var items = React.addons.update(this.state.items, { 
    [index]: { 
     amount: {$set: e.target.value} 
    } 
    }) 
    this.setState({items}) 
} 

Według tego ES6 compatability table, reagują na JSX transpiler wspiera ich, gdy są włączone jego transformacje harmonia, czy można użyć Babel zamiast tego (od react-tools is being deprecated in favour of Babel).

W przeciwnym razie, można użyć funkcji pomocnika, aby utworzyć obiekt o danej nazwie nieruchomości:

function makeProp(prop, value) { 
    var obj = {} 
    obj[prop] = value 
    return obj 
} 

// ... 

updateValue: function(index, e) { 
    var items = React.addons.update(this.state.items, makeProp(
    index, { 
     amount: {$set: e.target.value} 
    } 
)) 
    this.setState({items: items}) 
} 
+0

Dzięki za dokładną odpowiedź. Korzystam z gem-a [react-rails] (https://github.com/reactjs/react-rails) i pomimo włączenia flagi harmonii jako udokumentowanej i upewnienia się, że [transformacja właściwości jest obsługiwana] (https: // github .com/facebook/jstransform/blob/master/visitors/es6-object-computed-property-visitors.js), pojawia się ten błąd "Uncaught SyntaxError: Nieoczekiwany token [", więc pozostanę przy metodzie pomocnika, dopóki nie wyślij go z Babel. – tirdadc

+2

Jestem zdezorientowany przykładem funkcji pomocnika. 'this.state.items' jest tablicą i aktualizujesz ją do' {1: {amount: $ set: e.target.value}} '. Nadal uczę się, jak działa dodatek do aktualizacji, ale wydaje mi się, że to nie powinno działać. Zakładając, że to działa jakoś, czy nie mógłby po prostu zrobić 'update (this.state.items [index], {amount: {$ set: e.target.value}})'? Czy aktualizacja ma jakiś szczególny przypadek w przypadku tablic, które umożliwiają to działanie? – crush

Powiązane problemy