Tengo una parte del estado que contiene una serie de comentarios.
Cada comentario tiene una serie de respuestas.
¿Cómo puedo agregar un valor de respuesta a la matriz de respuestas de un comentario específico dentro de la matriz de comentarios?
Aquí está mi intento actual:
if (data) { const isLargeNumber = (comment) => comment.id === reply.commentId; const idx = comments.findIndex(isLargeNumber); setPost({ ...post, comments: { ...comments[idx], replies: [data.replyToComment, ...post.comments[idx].replies] } }) resetValues(); } idx contiene el valor correcto que necesito, pero no creo que mi implementación sea correcta aquí.
Como post.comments es una matriz, ciertamente necesita crear una matriz, no un objeto simple con { } . Le falta un nivel en su estructura anidada (la matriz de comentarios, versus el comentario específico). Puede usar Object.assign para reemplazar la entrada en [idx] :
const idx = post.comments.findIndex(isLargeNumber); setPost({ ...post, comments: Object.assign([...post.comments], { [idx]: { ...post.comments[idx], replies: [data.replyToComment, ...post.comments[idx].replies] } }) });Adaptando de este ejemplo :
setPost({ ...post, comments: [ ...post.comments.slice(0, idx), { ...post.comments[idx], replies: [...post.comments[idx].replies, data.replyToComment] }, ...post.comments.slice(idx + 1) ] });