Я реализовал веб-чат наact-redux, используя firebase для сообщений в реальном времени. Firebase всегда возвращает последний объект сообщения. Когда я обновляю sh страницу, последняя дата также добавляется в магазин, а последний объект дублируется в избыточном количестве.
Как я могу сделать это правильно, чтобы после обновления страницы я проверил хранилище на наличие дублирующегося сообщения, а затем не добавлял его в редукс?
Сообщения. js
const userData = JSON.parse(localStorage.getItem("user-data"));
useEffect( () => {
if(userData.account_id) {
firebaseDB.ref().child(API.firebaseEnv + "/messages/messageItem" + userData.account_id)
.on("value", snap => {
const dataMessages = snap.val();
console.log(dataMessages)
setTimeout(() => {
firebaseGetMessages(dataMessages);
}, 2000);
});
}
}, []);
Я пытался удалить сеанс после извлечения, но при обновлении страницы sh все данные удалялись
firebaseDB.ref().child(API.firebaseEnv + "/messages/messageItem" + userData.account_id).remove()
Действие. js
export const firebaseGetMessages = ( messages ) => (dispatch) => {
// console.log('action:', messages)
dispatch(firebaseMessageData(messages));
};
const firebaseMessageData = ( firebaseData ) => ({
type: "FIREBASE_SET_MESSAGE_DATA",
firebaseData
});
Редуктор. js
export default function messages ( state = [], action = {}) {
switch (action.type) {
case 'SET_MESSAGES_DATA':
return {
...state,
data: action.messages,
isLoading: false
};
case "FIREBASE_SET_MESSAGE_DATA":
// console.log('state:', state.data);
state.data.messages.push(action.firebaseData);
return {
...state,
};
default:
return state
}
}