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
相关产品推荐
相关产品推荐

