2016-10-28 3 views
1

Моего магазин:Ошибки при помощи реакции-обновление

{ 
    people: [ 
     { 
      id: 12345, 
      name: Person 1 
     }, 
     { 
      id: 54321, 
      name: Person 2 
     } 
    ] 
} 

Я пытаюсь обновить name собственности на лице 1. Я использую react-addons-update так:

update(state, { 
    people: { 
     [action.person.id]: { 
      name: action.person.name 
     } 
    } 
} 

action.person Где это объект { id: 12345, name: New name }.

Однако я получаю сообщение об ошибке:

Uncaught (in promise) TypeError: Cannot read property 'name' of undefined(…)

Это время брошенной в update методы react-addons-update «s. В частности,

for (var k in spec) { 
    if (!(ALL_COMMANDS_SET.hasOwnProperty(k) && ALL_COMMANDS_SET[k])) { 
     nextValue[k] = update(value[k], spec[k]); // Error occurs here 
    } 
} 

Насколько я могу сказать, проблема в том, что когда nextValue, value и spec все готово к people, k устанавливается в action.person.id. И, конечно, этот id не существует в массиве (это массив людей).

Так что мой вопрос в том, что я могу передать вместо [action.person.id] для этого? В соответствии с обоими this и this я должен работать.

+0

пса вы должны использовать [неизменность-хелперы] (https://github.com/kolodny/immutability-helper) - 'реагирующих-аддоны-update' является [устаревшее] (https://facebook.github.io/react/docs/update.html) – naomik

ответ

1

здесь вы идете

update(state, { 
    people: { 
     $apply: (people) => people.map((person) => { 
      if(person.id !== action.person.id) { 
       return person; 
      } 

      return { 
       ...person, 
       name: action.person.name 
      } 
     }) 
    } 
} 
Смежные вопросы