У меня есть следующий объект, из которого я хочу удалить один комментарий.
msgComments = {
comments: [
{ comment:"2",
id:"0b363677-a291-4e5c-8269-b7d760394939",
postId:"e93863eb-aa62-452d-bf38-5514d72aff39" },
{ comment:"1",
id:"e88f009e-713d-4748-b8e8-69d79698f072",
postId:"e93863eb-aa62-452d-bf38-5514d72aff39" }
],
email:"[email protected]",
id:"e93863eb-aa62-452d-bf38-5514d72aff39",
post:"test",
title:"test"
}
Создатель действия нажимает на функцию удаления API с помощью commentId:
// DELETE COMMENT FROM POST
export function deleteComment(commentId) {
return function(dispatch) {
axios.post(`${API_URL}/datacommentdelete`, {
commentId
},{
headers: { authorization: localStorage.getItem('token') }
})
.then(result => {
dispatch({
type: DELETE_COMMENT,
payload: commentId
});
})
}
}
Мой API удаляет комментарий, и я отправляю идентификатор комментария в свой Редьюсер, на данный момент это работает нормально, API работает, а комментарий удаляется. Проблема заключается в обновлении состояния в редюсере. После долгих проб и ошибок в данный момент я пытаюсь это сделать.
case DELETE_COMMENT:
console.log('State In', state.msgComments);
const msgCommentsOne = state.msgComments;
const msgCommentsTwo = state.msgComments;
const deleteIndexComment = state.msgComments.data.comments
.findIndex(elem => elem.id === action.payload );
const newComments = [
...msgCommentsTwo.data.comments.slice(0, deleteIndexComment),
...msgCommentsTwo.data.comments.slice(deleteIndexComment + 1)
];
msgCommentsOne.data.comments = newComments;
console.log('State Out', msgCommentsOne);
return {...state, msgComments: msgCommentsOne};
Оба состояния в И состоянии вывода возвращают один и тот же объект, у которого удален соответствующий комментарий, что меня озадачивает.
Кроме того, компонент не обновляется (когда я обновляю, комментарий исчезает, поскольку делается новый вызов API для возврата обновленного сообщения.
Все остальное вроде работает нормально, проблема похоже в редукторе.
Я прочитал другие сообщения о неизменности, которые были актуальны, и я все еще не могу найти решение. Я также исследовал и нашел библиотеку immutability.js, но прежде чем научиться ее использовать, я хотел найти решение (возможно, трудный путь, но я хочу понять, как это работает!).