#react-native
Вопрос:
у меня есть следующий объект в состоянии:
App.js
const data = {name: 'John', status:'employeed' }; const [manager, updateManager] = useState(data); const updateStatus = async () =gt;{ await service.setStatus(manager); }
setStatus напрямую изменяет менеджер, что, я думаю, является источником проблемы
service.js
setStatus(manager){ manager.status = 'employeed'; }
поэтому я изменил вызов, чтобы отправить копию объекта диспетчера и вернуть новый объект, но все равно получаю ошибку
you tried to modify 'status' key of an immutable object.
вот мое новое изменение
App.js
const updateStatus = async () =gt;{ const g = await service.setStatus({...manager}); updateManager(g); }
service.js
setStatus(manager){ manager.status = 'employeed'; return manager; }
Комментарии:
1. Вы все еще напрямую изменяете состояние.
setStatus(manager) { return {...manager, status: 'employeed'}; }
это то, как вы сделали бы это, не меняя оригинал. (Обратите внимание, что «занят» — это то, как вы бы написали статус трудоустройства на английском языке.)
Ответ №1:
Почему эта функция должна быть асинхронной?
const updateStatus = async () =gt;{ await service.setStatus(manager); }
Это вернет новый/обновленный объект, но не внесет никаких постоянных изменений.
setStatus(manager){ return {…manager,status: 'employeed'}; }
Сохраняется ли проблема после ваших последних изменений?
Вы должны передать обратный вызов, как это:
const updateStatus = (manager) =gt; { service.setStatus(()=gt; updateManager({ ...manager, status: 'employeed' }));
Service.js
setStatus(updateManager){ updateManager(manager); }
Комментарии:
1. setStatus-это обещание, поэтому пришлось выполнять его асинхронно. Да, после внесения изменений ошибка все еще сохраняется, заставляя меня задуматься, действительно ли я отправляю копию объекта.
2. setStatus должен быть асинхронным, но в вашем примере это совсем не обязательно.