I'm currently working on an application where I receive data from server-sent-events. the data stream sends everything once in the beginning and updates only the fields that need to be updated. My question is how I can save both the original JSON object and update only the updated items.
At this moment, all items are updated. For example, if I receive a standard JSON object with 2 items {color: "black", id: 0} and I receive the following update { id: 1 }, the object is as follows {color: "", id: 1} So the object is overwritten by an empty item because it was not there.
const [initialUserData, setInitialUserData] = useState({
id: 1,
name: 'Pol',
color: 'black',
});
useEffect(() => {
const unsubscribe = sse.subscribe('playerupdate', (d: any) => {
const receivedData = d;
const updatedUserData = { ...initialUserData, ...receivedData }; // Create a copy of initialUserData
// Iterate over the keys in receivedData and update updatedUserData
for (const key in receivedData) {
if (receivedData.hasOwnProperty(key)) {
updatedUserData[key] = receivedData[key];
console.log(key);
}
}
updateUserData(updatedUserData);
if (updatedUserData.PlayerId > 0) {
setSessionState(true);
} else if (updatedUserData.PlayerId === 0) {
setSessionState(false);
}
});
return unsubscribe;
}, []);
I am using ReactJs Context API, which is new to me, but it doesn't seem to be an issue since it updates perfectly.
I fixed it by making a normal let variable instead of a useState and updating it once. From then on the updatedUserData receives updates and puts both the variables together!