Skip to content

react-native笔记(十):realm数据持久化

图片

react native到今天是第四天学习,因为有react的基础,所以大部分东西是不用学的,都一样

从第一天开始,我就是以完成一个todolist应用为方向进行学习

今天已经完成了80%的功能,剩下就是登录,设置等,因为暂时不考虑服务器方面的交互,只考虑本地使用,所以,登录,个人设置等就不用做了,算是完成了

本篇文章是todolist最后一个知识点,数据本地持久化存储,

移动应用比如记账软件,还有这个todolist,或者类似微信的聊天记录。基本都是存储在本地的,使用性很强。

realm数据库是一个nosql类型的数据库,明天开始还要用uniapp做一个记账软件,又可以去学习一下sqlite关系型数据库了

接下来讲realm

安装

包括官网和各类文章,基本都是这样讲的

sh
npm install realm
npm install realm

然后,我也是这样做的

结果,和他们讲的都不一样

报错,各种报错,换版本,还是报错,这个坑都搞了我半天

最后,想到试试yarn

sh
yarn add realm
yarn add realm

奇怪了,一切运行正常

开始使用

新建db.js

这个忘了看谁的文章了,在他的基础上进行了修改

代码只贴了部分用来学习,并非全部

最重要的是思路

千万不要粘贴复制

js
import Realm from "realm";

import {Alert} from 'react-native'

/**表定义区**/
//todolist表
export const TodoDb = 'tododb';
//累计数据记录表
export const DataDb = 'datadb';

//todo表信息
const TodoSchema = {
    name: TodoDb,
    primaryKey: 'id',
    properties: {
        id: 'int',              //id
        content: 'string',      //内容
        create_time: 'string',  //创建时间
        type: 'int',            //类型: 0不重要不紧急 1 重要 2 紧急 3 重要且紧急
        status: 'int',          //状态:0未完成,1完成,2 已删除

    }
};


//实例化realm
let realm = new Realm({
    schema: [
        TodoSchema,
    ]
});


 
//添加表信息
export function writeData(obj,tabName) {
    return new Promise((resolve, reject) => {
        realm.write(() => {
            realm.create(tabName, obj, true)
            resolve(true)
        })

    })
}
//查询表信息
export function queryData(tabName) {
    return new Promise((resolve, reject) => {
        let data = realm.objects(tabName);
        let newData = JSON.stringify(data);
        resolve(JSON.parse(newData))
    })
}
// 更改已完成次数进行次数累加
export function updateFinishData(){
    return new Promise((resolve, reject) => {
        realm.write(() => {
            // DataDb是其他数据表名,代码并未贴出,知道参数是数据表名即可
            const data = realm.objects(DataDb);
            //修改数据和修改数组差不多,获取下标,修改对应下标的内容即可
            data[0].total_finish = data[0].total_finish + 1;
            resolve(true)
        })
    })
}
//删除一条信息
export function deleteData(id,tabName) {
    return new Promise((resolve, reject) => {
        realm.write(() => {
            let data = realm.objects(tabName);
            let rowData = data.filtered('id ==' + id);
            realm.delete(rowData);
            resolve(true)
        })
    })
}
import Realm from "realm";

import {Alert} from 'react-native'

/**表定义区**/
//todolist表
export const TodoDb = 'tododb';
//累计数据记录表
export const DataDb = 'datadb';

//todo表信息
const TodoSchema = {
    name: TodoDb,
    primaryKey: 'id',
    properties: {
        id: 'int',              //id
        content: 'string',      //内容
        create_time: 'string',  //创建时间
        type: 'int',            //类型: 0不重要不紧急 1 重要 2 紧急 3 重要且紧急
        status: 'int',          //状态:0未完成,1完成,2 已删除

    }
};


//实例化realm
let realm = new Realm({
    schema: [
        TodoSchema,
    ]
});


 
//添加表信息
export function writeData(obj,tabName) {
    return new Promise((resolve, reject) => {
        realm.write(() => {
            realm.create(tabName, obj, true)
            resolve(true)
        })

    })
}
//查询表信息
export function queryData(tabName) {
    return new Promise((resolve, reject) => {
        let data = realm.objects(tabName);
        let newData = JSON.stringify(data);
        resolve(JSON.parse(newData))
    })
}
// 更改已完成次数进行次数累加
export function updateFinishData(){
    return new Promise((resolve, reject) => {
        realm.write(() => {
            // DataDb是其他数据表名,代码并未贴出,知道参数是数据表名即可
            const data = realm.objects(DataDb);
            //修改数据和修改数组差不多,获取下标,修改对应下标的内容即可
            data[0].total_finish = data[0].total_finish + 1;
            resolve(true)
        })
    })
}
//删除一条信息
export function deleteData(id,tabName) {
    return new Promise((resolve, reject) => {
        realm.write(() => {
            let data = realm.objects(tabName);
            let rowData = data.filtered('id ==' + id);
            realm.delete(rowData);
            resolve(true)
        })
    })
}

基本使用方法就是上面代码中的部分,在需要的地方引入db文件

实际项目使用的功能更多,上面代码只是贴出增删改查,其他就根据自己的项目,添加需要的功能

本文到此结束。

反馈信息

INFO

邮箱: open_teams@163.com