我想编辑一条消息,但它只在我更改此消息_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]);
这是我要做的第一件事
ok,我发现了问题,在MessageText函数componentShouldUpdate需要修改一个位