无法在React Native中访问导入的类

时间:2018-03-31 19:00:29

标签: javascript class react-native

出于某种原因,我们在使用类本/原型进行反应时遇到了很多麻烦...我们不确定我们是否做错了,如果es6不是实际支持或什么。我们怎样才能在本机中使用类?显然,我们没有做正确的事。

我们尝试了什么

  • 创建一个函数并向其添加原型并在底部导出
  • 使用构造函数创建和导出类
  • 使用{}和不使用导入,并使用默认值
  • 导出

错误

  • Db不是构造函数
  • _Db2.default不是构造函数
  • 无法阅读属性'默认'未定义的
  • _Db.Db不是构造函数

无论我们尝试过什么,我们都无法导入我们创建的对象并实例化它。 Here is an example of the prototype we've set up in another stackoverflow post we made when trying to untangle the issue

以下是我们如何将其导入的示例。

import Db from '../localstorage/db/Db';
//var Db = require('../localstorage/db/Db');

const db = new Db();

使用require时,似乎import语句有效,并且我们在构造函数中分配的属性存在,但其他原型都不在对象中。

编辑1:以下是我们的类实现。我们在类之外实例化领域,因为在类as documented in this github issue内实例化时,领域似乎崩溃。

const realm = new Realm({
    schema: [Wallet, WalletAddress, WalletTransaction, Log, APIWallet, APITransaction, APIAccount, Configuration],
    path: config.db_path
});

export default class Db extends Object {
    constructor() {
        super();
        this.realm = realm;
        logger(2, realm.path);
    }

    //https://realm.io/docs/javascript/latest/#to-many-relationships
    doOneToMany(one, many) {
        many.forEach(m => {
            this.write(() => {
                one.push(m);
            });
        });
    }

    query(model, filter) {
        let results = this.realm.objects(model);
        if (filter) {
            return results.filtered(filter);
        }
        return results;
    }



    insert(model, options) {
        if (options == undefined && model instanceof Realm.Object) {
            this.write(() => {
                realm.create(model);
            });
        } else {
            this.write(() => {
                realm.create(model, options);
            });
        }
    }

    update(obj, options) {
        this.write(() => {
            Object.keys(options).map((key, attribute) => {
                obj[key] = attribute;
            });
        });
    }

    del(model, obj) {
        this.write(() => {
            realm.delete(obj);
        });
    }

    write(func) {
        try {
            realm.write(func);
        } catch (e) {
            logger(0, e);
            throw new Error('Db.js :: Write operation failed ::', e);
        }
    }

    close() {
        Realm.close();
    }
}

//module.exports = { Db };

1 个答案:

答案 0 :(得分:0)

答案是我们在Logger.js文件中有一个循环依赖项,它需要Db.js而Db.js需要Logger才能进行有用的日志记录。删除循环依赖项会导致类和所有其他导入问题消失。