首页 > 解决方案 > React Native 和 Reactotron 中 RealmDB 对象的问题

问题描述

我在 React Native 项目中遇到了 RealmDB 对象的问题,我对 RealmDB 执行的每个查询都会返回 reactotron 中的空对象数组,{}并且如果我尝试使用 rest/spread 运算符。但是,当我按属性访问属性时。有人遇到同样的问题并设法解决了吗?PS:我已经在项目中链接了领域和reactotron

关于我所描述的图像

Reactotron:https ://i.stack.imgur.com/OhN1D.png 代码:https ://i.stack.imgur.com/gsNwk.png

我尝试发现问题的一段代码示例:

async getAllMov(){
    try{
        const realm = await getRealm();
        const listaMov = realm.objects(MovSchema.schema.name);

        console.tron.log(listaMov[4]);

        const d = {...listaMov[4]};

        console.tron.log(d);

        let dados = {
            movID: listaMov[4].movID,
            titulo: listaMov[4].titulo,
            descricao: listaMov[4].descricao,
            valor: listaMov[4].valor,
            tipo: listaMov[4].tipo
        }; 

        console.tron.log(dados);


    }catch(e){
        console.tron.log(e.message);
    }
} 

标签: javascriptreact-nativerealm

解决方案


这解决了我的问题,希望对你也有帮助:

export default function getRealmObjects = async (schemaName) => {

        const realm = await getRealm();

        var objects = realm.objects(schemaName);

        //this is because realm put some obstacles when you try to modify it's objects, the solution found was to clone the results before return
        let result = [];

        for (let i = 0; i < objects.length; i++) {

            let item = {};
            for (const key in objects[i]) {
                item[key] = objects[i][key];
            }

            result.push(item)
        }

        return result?.length > 0 ? result : [];
}

基本上你不能修改领域对象,所以你必须在使用前克隆它。


推荐阅读