ошибка react native при открытии области более чем на одном экране

#reactjs #react-native #realm

#reactjs #react-native #область

Вопрос:

У меня возник вопрос относительно создания и использования базы данных realm в react-native.

У меня есть два экрана, отвечающих за выполнение таких операций, как crud, category.js и client.js

В category.js У меня есть следующий конструктор

 constructor(props) {
    super(props);
    realm = new Realm({
        schema: [{ name: 'category', primaryKey: 'id', properties: { id: 'int', descricao: 'string', status: 'bool' } }]
    })
}
  

и в cliente.js У меня есть

 constructor(props) {
    super(props);
    realm = new Realm({
        schema: [{ name: 'client', primaryKey: 'id', properties: { id: 'int', nome: 'string', cpf: 'string', celular: 'string', status: 'bool' } }]
    })
}
  

Теперь у меня есть следующие сомнения.

при такой схеме, о которой идет речь, есть ли у меня база данных, в которой у меня есть таблицы categories и clients?

когда я нахожусь на client.js экран, и я хочу перейти к category.js Я получаю сообщение об ошибке: уже открыто в текущем потоке с другой схемой.

как я могу закрыть соединение или открыть, чтобы я мог использовать область на обоих экранах?

Ответ №1:

Вы не открываетесь realm на новом экране, вы пытаетесь создать новый экземпляр. Вот почему у вас возникают проблемы. В вашем приложении должен быть только один экземпляр realm .

  1. Создайте один файл, в который вы импортируете realm зависимость.
  2. Создайте всю необходимую схему в этом файле.
  3. Создайте new Realm() экземпляр и добавьте к нему свою схему
  4. Экспортируйте новый экземпляр realm .
  5. Вместо использования realm в ваших компонентах используйте ваш экземпляр realm , который вы только что создали.

realm.js

 import Realm from 'realm';

class Category extends Realm.Object {}
Category.schema = {
  name: 'category',
  primaryKey: 'id',
  properties: {
    id: 'int',
    descricao: 'string',
    status: 'bool'
  }
};

class Client extends Realm.Object {}
Client.schema = {
  name: 'client',
  primaryKey: 'id',
  properties: {
    id: 'int',
    nome: 'string',
    cpf: 'string',
    celular: 'string',
    status: 'bool'
  }
};

const RealmInstance = new Realm({ schema: [Category, Client] });
export default RealmInstance;
  

Тогда вы сможете импортировать его следующим образом

 import realm from './path/to/realm.js'
  

Вы можете увидеть, как realm это сделать, посмотрев на их пример.

Комментарии:

1. Большое вам спасибо за ваш ответ, благодаря вашему ответу я смог решить свою проблему. Спасибо