Home > database >  I'm trying to update object inside object in react hooks with useState
I'm trying to update object inside object in react hooks with useState

Time:09-13

I'm trying to update object inside object in react hooks with useState.

When I create it's ok, but when I try to update only the count it's deleting the neighbors.

This is the console after create

{fish1: {…}}
fish1:
count: 1
neighbors: Array(1)
0: Array(3)
0: "fish3"
1: "fish6"
2: "fish7"

after the update

{fish1: {…}}
fish1:
count: 2

This is the code that create or update

if (fishProfile.name in fishDictionary) {
  setFishDictionary({
    ...fishDictionary,
    [fishProfile.name]: {
      count: fishDictionary[fishProfile.name].count 1
    }
  })
} else {
  setFishDictionary({
    ...fishDictionary,
    [fishProfile.name]: {
      count: 1,
      neighbors: [fishProfile.Neighbors]
    }
  })
}

CodePudding user response:

 if(fishProfile.name in fishDictionary){
            setFishDictionary({...fishDictionary,[fishProfile.name]:{count:fishDictionary[fishProfile.name].count 1,neighbors:fishDictionary[fishProfile.name].neighbors } })
         }
        else
        {
        setFishDictionary({...fishDictionary,[fishProfile.name]:{count:1,neighbors:[fishProfile.Neighbors]}})
        }

CodePudding user response:

You are mutating state and removing properties when updating the fishDictionary state. When updating React state it is necessary to shallow copy all state, and nested state, that is being updated.

setFishDictionary(fishDictionary => {
  if (fishProfile.name in fishDictionary) {
    return {
      ...fishDictionary,
      [fishProfile.name]: {
        ...fishDictionary[fishProfile.name], // <-- shallow copy
        count: fishDictionary[fishProfile.name].count   1
      }
    };
  } else {
    return {
      ...fishDictionary,
      [fishProfile.name]: {
        count: 1,
        neighbors: [fishProfile.Neighbors]
      },
    };
  }
});
  • Related