React Native Realm安装 和 Realm入门理解

前端之家收集整理的这篇文章主要介绍了React Native Realm安装 和 Realm入门理解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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',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: 1migration: migrationFunction1 },
  : schema22: migrationFunction2 ...
]

@H_403_168@// the first schema to update to is the current schema version
@H_403_168@// 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();
}

@H_403_168@// open the Realm with the latest schema
var realm [schemas-]);


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

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

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

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

3.notification机制:(copy 官方)

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

@H_403_168@// Unregister all listeners
realm.removeAllListeners(); 

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

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

原文链接:https://www.f2er.com/react/303916.html

猜你在找的React相关文章