javascript - 将新对象推送到平面列表数据数组中
问题描述
我正在尝试制作一个聊天应用程序,我有一个 flatlist,我的 flatlist 数据来自 api,我将把我的新消息推送到这个 flatlist 并用新数据显示我的组件。但问题是我的列表数据没有改变,也没有显示我的新消息,有没有人可以帮助我?
useEffect(() => {
chatHistoryData()
}, [])
let chatHistoryData = async () => {
try {
setLoading(true);
setError(false);
let res = await axios.get(`https://call.darmankade.com/report/${reserveHash}`);
if (res && res.data) {
let filterChatData = res.data.filter((x: any) => x.type != 4);
console.log("chat data: ", filterChatData)
setChatData(filterChatData);
setLoading(false);
setError(false);
}
} catch (error) {
console.log('loading consult history failed: ', error);
setLoading(false);
setError(true);
}
}
我的平面列表和文本输入组件
<FlatList
ref={chatList}
data={chatData}
keyExtractor={(item: any) => item.index}
onContentSizeChange={() => chatList.current.scrollToEnd()}
ListFooterComponent={() => { return <View style={{ height: verticalScale(20) }} /> }}
renderItem={(data: any) => {
return <MessageBody
patientSide={data.item.side == consultSides.Patient}
doctorSide={data.item.side == consultSides.Doctor}
textMsg={data.item.type == 1}
hasImage={data.item.type == 3}
hasVoice={data.item.type == 2}
content={data.item.content}
messageTime={data.item.date.slice(11, 16)}
/>
}}
/>
<MessageInput
inputValue={messageTxt}
inputOnchangeText={setMessageTxt}
startRecording={sendMessage}
/>
我的发送按钮
let sendMessage = useCallback(() => {
let newChatData = [...chatData]
newChatData.push({
connectionId: "9f5dssd_qGJUYhHMDRnm05g5yw",
content: "salam niloo",
date: "2020-10-31T12:55:03.076",
side: consultSides.Doctor,
type: consultMessages.text,
userAgent: null
})
setChatData(newChatData)
}, [messageTxt])
解决方案
而不是使用.push
您可以执行以下操作,
let sendMessage = useCallback(() => {
let newChatData = [...chatData, {
connectionId: "9f5dssd_qGJUYhHMDRnm05g5yw",
content: "salam niloo",
date: "2020-10-31T12:55:03.076",
side: consultSides.Doctor,
type: consultMessages.text,
userAgent: null
}];
setChatData(newChatData)
}, [messageTxt])
推荐阅读
- python - 按值排序字典python(word2vec)
- apache-kafka - Kafka MirrorMaker2 自动消费者偏移同步
- python - mac 的 Python 问题:pd.to_csv 正在破坏 DF 的结构
- amazon-web-services - 调用 SNS 主题后,状态机任务卡在“正在运行”状态
- c++ - 对象数组复制构造函数
- javascript - 在 forEach -> eventlistener 函数中传递参数
- python - 是否有适用于 Python 3.9 的 MySQL 连接器版本?
- kubernetes - 如何使 configmap 传播到正在运行的 pod(无需重新启动它们)
- r - 将参考文献放在 Rmd 的表中
- python - SQLAlchemy ResultProxy 对象不能被使用两次