提问人:Coding Ninja123211 提问时间:10/27/2023 最后编辑:Coding Ninja123211 更新时间:10/27/2023 访问量:50
React Js- 无法将对象“#<Object> 的只读属性分配给只读属性
React Js- Cannot assign to read only property of object '#<Object>'
问:
在我的应用程序中,我有一个 ,它从 firebase 获取所有数据,并将数据调度给状态。useEffect
以下是 useEffect 中用于获取所有聊天数据的代码:
let chatsData={}
let chatsFoundCount = 0
chatIds.forEach(chatId => {
const chatRef = child(dbRef, `chats/${chatId}`)
chatsFoundCount++
onValue(chatRef, (chatSnapshot) => {
const data = chatSnapshot.val()
data.key = chatSnapshot.key
chatsData[chatId] = data
if (chatsFoundCount >= chatIds.length) {
dispatch(setChatsData({chatsData}))
}
}
}
})
这将按预期工作,并在加载所有聊天时调度数据,并在更新该位置的数据时调度数据,再次运行其中的代码,并修改并重新调度对象。chatRef
onValue
chatsData
我还加载了消息数据,但是在尝试修改对象时,出现错误:messagesData
Cannot assign to read only property '-NhgsfvmDOrruQXdC0S8' of object '#<Object>'
这是用于检索消息、侦听位置更改和重新调度的代码:
const messagesRef = child(dbRef, `messages/${chatId}`)
refs.push(messagesRef)
let messageData = {}
onValue(messagesRef, (messageSnapshot) => {
messageSnapshot.forEach((childSnapshot) => {
let data = childSnapshot.val()
if (data.hiddenFrom) {
let currentHiddenFrom = data.hiddenFrom.filter((uid) => uid === userData.userId)
console.log(currentHiddenFrom);
if (currentHiddenFrom.length === 0) {
messageData[childSnapshot.key] = childSnapshot.val()
}
} else {
messageData[childSnapshot.key] = data
}
dispatch(setMessagesData({chatId, messageData}))
注意:上面的代码也在 chatIds.forEach
块中。尝试更新中的对象时会出现问题,但是我对对象执行了上述相同的技术,并且一切都按预期工作。为什么对象不能像对象一样更新?谢谢。messageData
onValue
chatsData
messageData
chatsData
更新:当我在 中添加这段代码时,一切都按预期工作,因此调度不是问题,而是变量的位置。为什么会这样?let messageData = {}
onValue
答: 暂无答案
评论
dispatch(setMessagesData({chatId, messageData}))
setMessagesData
forEach loop