Имею вот такую структуру state:
{
articles: [
{
id: '1AAAA',
title: 'AAAA',
summary: 'minimalAAA',
text: 'dsffsfsegrsgsrgsrs',
comments: [
{ id: '4cdrbdrbvoido',
name: 'Den',
comment: 'Ljbelkfei nfien nfien nfien nfien nfien nfien nfien nfien'},
{id: '5vjdbnvsjm;slv',
name: 'Ben',
comment: 'Ljbelkfei nfien nfien nfien nfien nfien nfien nfien nfien' }
]
},
{
id: '2BBBBB',
title: 'BBBBB',
summary: 'minimalBBB',
text: 'dsffsfsegrsgsrgsrs',
comments: [
{ id: '1cudohvoido',
name: 'Sem',
comment: 'Hnefei nfien nfien nfien nfien nfien nfien nfien nfien'},
{id: '2knsdknvpdo',
name: 'Pen',
comment: 'Hnefei nfien nfien nfien nfien nfien nfien nfien nfien'}
]
}
]
};
Каждый объект внутри articles это статья со своим уникальным id и остальными данными, в том числе и комментариями к статье внутри comments, которые так же лежат в массиве.
Я создал action, который в reducer передает из переменных только id комментария который нужно удалить из state.
const commentDelete = (idComment) => {
return {
type: 'COMMENT_DELETE',
id:idComment,
};
};
Не знаю как правильно написать функцию, которая вернет новый state но уже без удаленного комментария. Через стандартный метод state.articles.filter() не получится, возможно нужно внутри метода filter добавить условие или цикл, но я так и не нашел решения.
Думал даже как нибудь изменить структуру state, чтобы так глубоко не лезть внутрь объекта, но не хочется переписывать остальные actions.
Для примера, вот как я делал удаление статьи
case 'ARTICLES_DELETE':
const delArt = state.articles.filter(user => (user.id !== action.id));
return {
...state,
articles: [ ...delArt]
};