#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
.
- Создайте один файл, в который вы импортируете
realm
зависимость. - Создайте всю необходимую схему в этом файле.
- Создайте
new Realm()
экземпляр и добавьте к нему свою схему - Экспортируйте новый экземпляр
realm
. - Вместо использования
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. Большое вам спасибо за ваш ответ, благодаря вашему ответу я смог решить свою проблему. Спасибо