Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I want to modify my data in firebase but I am passing the property to be updated as an argument pf a function

I want to modify my data in firebase but I am passing the property to be updated as an argument of a function, but it’s not working. please take a look at the code to better understand what I am trying to say.

export const updateGameData = async (uid, level, playerStar, moves) => {
  const userDocRef = doc(db, "users", uid);
  const data = {
    levels: {
      level: { star: playerStar, playerMoves: moves },
    },
  };
  try {
    await setDoc(userDocRef, data, { merge: true });
  } catch (error) {
    console.log(error);
  }
};

As you can see I am passing level as an argument but it not taking the value of the level I passed as an argument when I use it as a property to create an Object. Please help me out.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Your question isn’t entirely clear, but I believe level is a variable that should hold the key to push to, and not a value.

In JS, creating an object works like this:

const obj = {
  level: 1
}

Will create an object with a single key a that has value 1.

What if we want a variable to hold the key to save to?

const level = 12

const obj = {
  level: 1
}

This doesn’t change the output, because level is a literal string in this object definition. However if we wrap it in brackets like so: [level] inside the object definition…

const level = 12

const obj = {
  [level]: 1
}

We will have an object with a single key 12 that has value 1.

This is because brackets as the key name will cause the JS expression inside the brackets to be evaluated and the expression should return a result that can then be used as key.

See MDN computed property names for a more detailed explanation.

You want your data defined like this:

const data = {
    levels: {
      // notice brackets
      [level]: { star: playerStar, playerMoves: moves },
    },
  };
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading