首页 > 解决方案 > 在 push() 中插入子节点数组的问题

问题描述

我有以下代码:

export const createCharacter = (username, name, sex, vocation, achievementPoints, world) => {
    return (dispath) => {
        firebase.auth().signInWithEmailAndPassword('dev7@gmail.com', '123123')
            .then(value => {
                firebase.database().ref('/sales/')
                    .push({
                        owner: username,
                        character: [
                            {
                                name: name,
                                sex: sex,
                                vocation: vocation,
                                achievementPoints: achievementPoints,
                                world: world
                            }
                        ],
                        price: 21.12
                    })
                    .then(() => {

                    })
            })
            .catch(error => alert(error))
    }
}

...有了它,我得到了以下结果:

结果在火力基地

当我第一次尝试执行 action 方法时,我发现了这个错误:

错误:Reference.push 失败:第一个参数在属性中包含未定义sales.character.0.name

但是当我第二次执行它而不刷新时,推送是成功的。

我的问题是,我应该如何推送才能不生成此 UID?

标签: javascriptfirebasereact-nativefirebase-realtime-databaseecmascript-6

解决方案


当您将对象传递给 Firebase 时,属性的值可以是值或 null。它们不能是未定义的,

firebase.database().ref('/sales/')
                    .push({
                        owner: username || null,
                        character: [
                            {
                                name: name || null,
                                sex: sex || null,
                                vocation: vocation || null,
                                achievementPoints: achievementPoints || null,
                                world: world || null
                            }
                        ],
                        price: 21.12
                    })

推荐阅读