React Native Realm安装 和 Realm入门理解

1 篇文章 0 订阅
1 篇文章 0 订阅

realm安装:

1.全局安装 rnpm    npm install -g rnpm

2.cd 到工程目录   npm install --save realm

3.将realm库依赖到RN项目中:rnpm link realm


入门理解:(提取一些比较重要的概念,realm官方文档没有详细说明的点)

1.创建目录:默认在缓存document目录下

let db = new Realm({

path:'PUK.realm', 

scheme:[IMSchema]

})

可以通过  console.log(JSON.stringify(db.path)) 输出数据库的绝对路径,

所以自定义目录,path设置的路径需要也是绝对路径。


2.realm增删改查基本操作的写法:

a.修改:增,删,改   需要放在realm的写事务中完成。

realm.write(()=>{

let  car1= realm.create('Car',{id:1,name:'mini'}); // 【增】'Car'是表名,car 是表的一条数据

let car2= realm.create('Car',{id:1,name:'dazong'},true);//[改] 

//改需要满足两个条件:1.第三个参数true 2.id是主键  如果id不是主键,这句写法就是增

realm.delete(car2);//[删]

})

b.查:

let cars = realm.objects('Car');  //取此表所有数据

let carsSpecial = cars.filtered('name = "mini" OR name BEGINSWITH "m"'); //条件查询

let carsRange = cars.slice(0,5);//范围筛选

let carsSorted = carsSpercial.sorted('mini');//因为单纯范围筛选没什么意义,所以加上排序方法。

//通常使用方式:查询->排序->筛选

//注意:这里的排序只作用于内存,并不会反映在数据库中


3.realm几个很有用的特性:

1.migration方法

因为定义的scheme在对应的数据库中生成表之后,修改格式是违法的。所以需要用到migration.

它可以把旧数据字段整合到新的数据字段中。

同时migration最大优势是可以对数据库实现版本控制:

写法:(copy官方)

var schemas = [
  { schema: schema1, schemaVersion: 1, migration: migrationFunction1 },
  { schema: schema2, schemaVersion: 2, migration: migrationFunction2 },
  ...
]

// the first schema to update to is the current schema version
// since the first schema in our array is at
var nextSchemaIndex = Realm.schemaVersion(Realm.defaultPath);
while (nextSchemaIndex < schemas.length) {
  var migratedRealm = new Realm(schemas[nextSchemaIndex++]);
  migratedRealm.close();
}

// open the Realm with the latest schema
var realm = new Realm(schemas[schemas.length-1]);


2.auto-updated 机制:(copy 官方)

let hondas = realm.objects('Car').filtered('make = "Honda"');
// hondas.length == 0

realm.write(() => {
  realm.create('Car', {make: 'Honda', model: 'RSX'});
});
// hondas.length == 1

hondas一次取完,可以一直与数据库保持同步,不用再次取。


3.notification机制:(copy 官方)

// Observe Collection Notifications
realm.objects('Dog').filtered('age < 2').addListener((puppies, changes) => {
  
  // Update UI in response to inserted objects
  changes.insertions.forEach((index) => { //增 事件回调
    let insertedDog = puppies[index];
    ...
  });
  
  // Update UI in response to modified objects
  changes.modifications.forEach((index) => { //改 事件回调
    let modifiedDog = puppies[index];
    ...
  });
  
  // Update UI in response to deleted objects
  changes.deletions.forEach((index) => {//查 事件回调
    // Deleted objects cannot be accessed directly
    // Support for accessing deleted objects coming soon...
    ...
  });
  
  
});

// Unregister all listeners
realm.removeAllListeners();

因为realm auto-updated机制,所以很好的能够支持数据监听并抛出数据变动事件。

如果感兴趣继续探讨,欢迎加QQ群:429307812




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值