Вопрос:

Как клонировать реквизит и изменить конкретные данные

reactjs redux

49 просмотра

1 ответ

3288 Репутация автора

Как отредактировать реквизит перед отправкой в ​​состояние редукции? По сути, вы не можете изменить свое состояние, поэтому я должен назначить новые данные целиком.

const graphQLReturnedData = [

  { id: 1, foo: "bar", <longer-list> },
  { id: 2, foo: "pub", <longer-list> },

]


graphQLReturnedData.find(t => t.id === 1  ).foo = "me"; // Cannot assign to read only property...

Точный вопрос, как клонировать реквизит и изменить значение объекта? Не повезло с

var newData = Object.assign({}, graphQLReturnedData)
newData.find(t => t.id === 1  ).foo = "phew";

Redux нужны совершенно новые данные, когда мне нужно только изменить небольшое значение.

Автор: Sylar Источник Размещён: 08.11.2017 11:41

Ответы (1)


1 плюс

5693 Репутация автора

Решение

Вы Object.assignклонируете объект массива, но элементы в нем - все те же объекты со свойствами только для чтения. Если вы используете a map, вы можете вернуть новый массив с новым объектом для соответствующих объектов id(при условии, idчто они уникальны в массиве):

const newData = graphQLReturnedData.map(t => t.id !== 1 ? t : {...t, foo: "me"});

или, используя Object.assign:

const newData = graphQLReturnedData.map(
  t => t.id !== 1 ? t : Object.assign({}, t, {foo: "me"})
);
Автор: Oblosys Размещён: 09.11.2017 12:23
Вопросы из категории :
32x32