Подтвердить что ты не робот

Динамический ключ в помощнике обновления обновления для массива

https://facebook.github.io/react/docs/update.html

У меня есть функция обновления, которая получает индекс вместе с событием, чтобы изменить значение для этого конкретного элемента в массиве.

Как мне получить index для оценки вместо того, чтобы рассматриваться как заданный ключ в этом сценарии? Возможно ли это?

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

В настоящее время это явно не работает, потому что он пытается обновить this.state.items['index']['amount'], который не установлен, когда я хочу изменить this.state.items[1]['amount'] для индекса 1.

4b9b3361

Ответ 1

Вы можете использовать имена вычисленных имен ES6, которые выглядели бы следующим образом с помощью переменной index:

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

В соответствии с этой таблицей совместимости ES6, Transpiler React JSX поддерживает их, когда включены преобразования Harmony, или вы можете использовать Babel вместо этого (так как реагирующие инструменты устаревают в пользу Babel).

В противном случае вы можете использовать вспомогательную функцию для создания объекта с заданным именованным свойством:

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})
}