【发布时间】:2019-12-31 02:44:19
【问题描述】:
为网站创建评论部分,我遇到了一个大问题。目前我有一个删除按钮,可以根据它们的索引从状态中拼接 cmets。我需要将数组反向显示给用户——所以当他们制作多个 cmets 时,最新的一个在上面。
问题是,如果我 reverse() 映射数组,索引不会随之反转,因此单击第 1 项的删除会删除最后一项,反之亦然。
const [userComments, setUserComments] = useState([])
const postComment = (event, userComment) => {
if (event.key === 'Enter') {
setUserComments(prevState => ([...prevState, {comment: userComment}]))
}
}
const deleteComment = (e, i) => {
const userCommentsArray = [...userComments]
userCommentsArray.splice(i, 1)
setUserComments(prevState => ([...prevState], userCommentsArray))
}
return (
<input
placeholder="Add a public comment"
onKeyUp={event => postComment(event, event.currentTarget.value)}
onClick={event => showCommentButtons()}
/>
{ userComments
? userComments.map((item, i) => (
<div className="button" onClick={e => deleteComment(e, i)}>Button</div>
<p className="comment">{item.comment}</p>
))
: null
}
)
【问题讨论】:
-
cmets 没有自己的身份吗?如果没有,请先构建
comments.map((comment, index) => ({ ...comment, index })),然后将 that 反向。 -
你的 cmets 应该有一个
id与他们每个人相关联,这将帮助你跟踪评论并帮助 React 选择性地更新 DOM。使用数组索引来识别评论是一个非常糟糕的主意。 -
@AkshitMehra 想这样做,但想不通。有什么方法可以为它们生成随机 id,也可以通过函数从状态中查找和删除?
-
@RobertC 你可以为这个npmjs.com/package/uuid使用
uuid包
标签: javascript reactjs