我想编辑一条消息,但只有当我更改此消息_id 时它才会更新。有人可以告诉我如何做吗,这是我的代码:
const onSend = useCallback((messagesToSend = []) => {
if(editMessage != null){
setEditMessage()
const m = messagesToSend[0]
const newMessages = [...messages]
const index = newMessages.findIndex(mes => mes._id === editMessage._id);
console.log('index: ', index)
if(index > -1){
newMessages[index].text = m.text // => ***i only edit the text***
// newMessages[index]._id = uuid.v4() => ***this working if changed _id***
console.log('newMessages', newMessages[index]) // => ***new message changed it's text but the bubble not change when re-render***
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
setMessage(newMessages)
}
}else{
setReplyMessage()
appendMessage(messagesToSend)
}
})
看起来您正在使用
useCallback
而不使用依赖数组。这意味着您依赖的任何依赖项都将被记忆,并且在您运行该函数时不会更新。
您应该将
messages
、editMessage
,也许还有 setMessage
和 appendMessage
添加到依赖项数组中。像这样:
const onSend = useCallback(
(messageToSend = []) => etc,
[messages, editMessage, setMessage, appendMessage]);
这是我要尝试的第一件事
好的,我发现问题了,在 MessageText 中,函数 componentShouldUpdate 需要稍微修改一下
你能告诉我你是如何解决这个问题的吗?我正在努力解决同样的问题..如果我按下它,则需要更新气泡..