You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据更新问题:函数参数作为对象属性不生效求助

问题解决:Firebase动态属性更新失效

你代码里的核心问题是:创建data对象时,levels下的level被当作固定字符串属性名使用,而非传入的变量值。这就导致无论你传入什么关卡数值,最终写入Firebase的键都是字符串"level",而非你期望的具体关卡值。

修复方案

使用ES6的计算属性名语法,把变量level用方括号[]包裹,这样就能将变量的实际值作为对象的属性名:

export const updateGameData = async (uid, level, playerStar, moves) => {
  const userDocRef = doc(db, "users", uid);
  const data = {
    levels: {
      [level]: { star: playerStar, playerMoves: moves }, // 用方括号包裹level变量
    },
  };
  try {
    await setDoc(userDocRef, data, { merge: true });
  } catch (error) {
    console.log(error);
  }
};

可选优化:更精准的部分更新

如果只是需要更新指定关卡的star和playerMoves字段,推荐使用updateDoc替代setDoc,它更贴合"部分更新"的场景,避免意外覆盖其他字段:

export const updateGameData = async (uid, level, playerStar, moves) => {
  const userDocRef = doc(db, "users", uid);
  // 通过点路径语法指定嵌套字段
  const updateData = {
    [`levels.${level}.star`]: playerStar,
    [`levels.${level}.playerMoves`]: moves
  };
  try {
    await updateDoc(userDocRef, updateData);
  } catch (error) {
    console.log(error);
  }
};

内容的提问来源于stack exchange,提问作者Muhammad Najib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:30:58