изменить состояние без изменения старого состояния в реакции - PullRequest
0 голосов
/ 30 марта 2020

У меня есть это состояние по умолчанию:

const [manager, setManager] = useState([{ name: undefined, project: [] }]);

У меня есть данные, поступающие от API, который выглядит следующим образом:

[{name : 'John doe'} , {'jane' : doe}]

Как мне обновить свое состояние, чтобы оно выглядело как вот так после добавления данных в состояние:

[{ name: 'john doe', project: [] } , { name: 'jane doe', project: [] }]; 

Я пробовал это:

setManager(prev => ([...prev , res.data]));

1 Ответ

0 голосов
/ 30 марта 2020

Я предполагаю, что вы хотите изменить это:

[{name : 'John doe'}, {name : 'Jane doe'}]

на что-то подобное

[{ name: 'john doe', project: [] } , { name: 'jane doe', project: [] }];

В этом фрагменте вы распространяете существующие данные с помощью нового данные.

 setManager(prev => ([...prev, res.data]));

Таким образом, в manager вы получите 2 массива, поскольку вы не распространили второй

[{ name: undefined, project: [] }, [{name : 'John doe'} , {name : 'Jane doe'}]]

В этом случае также делаются предположения о том, что ваш project ключ не может быть пустым, и вы хотите map существующий проект с данными внутри каждого вашего API-данных.

Я сделаю что-то вроде этого

setManager(prevData => 
  resData.map(singleRes => {
    return {name: singleRes.name, project: prevData.project}
  })
)
...