Вы отправили полезную нагрузку в виде массива с contactId
и contact
редуктору, где вы ожидаете, что полезная нагрузка будет иметь поле _id
в редукторе. Вероятно, вам просто нужно отправить контакт и использовать поле _id
из него, если контакт, отправленный для обновления контакта, имеет формат
{
"_id":"5eb0c93f8016c9de09f3d308",
"contact":{
"name":"Woodes Rogers",
"email":"woodes@rogers.com",
"phone":"3217037475"
},
"owner_id":"5ea89a7e94861451f4c4fe6f"
},
Измените свое действие на приведенный ниже код, чтобы он работал
const updateContact = async (contactId, contact) => {
const query = { _id: contactId };
const update = {
$set: {
contact,
},
};
const options = { upsert: false };
await items.updateOne(query, update, options);
dispatch({
type: 'updateContact',
payload: contact,
});
};
В случае, если ваш контактный объект имеет простой формат ниже
{
"name":"Woodes Rogers",
"email":"woodes@rogers.com",
"phone":"3217037475"
},
Вам нужно будет передать contactId отдельно и обновить редуктор, как показано ниже
const updateContact = async (contactId, contact) => {
const query = { _id: contactId };
const update = {
$set: {
contact,
},
};
const options = { upsert: false };
await items.updateOne(query, update, options);
dispatch({
type: 'updateContact',
payload: { contact, contactId },
});
};
и редуктор будет следующим
case 'updateContact':
return {
...state,
contacts: state.contacts.map((contact) =>
contact._id === action.payload.contactId ? { ...contact, contact: action.payload.contact } : contact
),
loading: false,
};