在 useState 中向数组添加值,但仅在数组的特定索引处
Adding value to an array in useState but only at a particular index of the array
我有一个状态,其中包含一组评论。
每条评论都有一组回复。
如何向评论数组中特定评论的回复数组添加回复值?
这是我目前的尝试:
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
包含我需要的正确值,但我认为我的实现在这里不正确。
由于post.comments
是一个数组,你当然需要创建一个数组,而不是一个带有{ }
的普通对象。您在嵌套结构中缺少一个级别(评论数组,而不是特定评论)。您可以使用 Object.assign
替换 [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]
}
})
});
改编自:
setPost({
...post,
comments: [
...post.comments.slice(0, idx),
{
...post.comments[idx],
replies: [...post.comments[idx].replies, data.replyToComment]
},
...post.comments.slice(idx + 1)
]
});
我有一个状态,其中包含一组评论。
每条评论都有一组回复。
如何向评论数组中特定评论的回复数组添加回复值?
这是我目前的尝试:
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
包含我需要的正确值,但我认为我的实现在这里不正确。
由于post.comments
是一个数组,你当然需要创建一个数组,而不是一个带有{ }
的普通对象。您在嵌套结构中缺少一个级别(评论数组,而不是特定评论)。您可以使用 Object.assign
替换 [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]
}
})
});
改编自
setPost({
...post,
comments: [
...post.comments.slice(0, idx),
{
...post.comments[idx],
replies: [...post.comments[idx].replies, data.replyToComment]
},
...post.comments.slice(idx + 1)
]
});