thewei / react-native-store

A simple database base on react-native AsyncStorage.
https://github.com/thewei/react-native-store
Other
569 stars 74 forks source link
asyncstorage database react-native react-native-store

react-native-store

Build Status npm version NPM downloads

A simple database base on react-native AsyncStorage.

Installation

$ npm install react-native-store --save

Upgrading from previous version? Check for breaking-changes.

Data anatomy

db_store
   |---model_name
         |---totalrows (variable)
         |---autoinc (variable)
         |---rows (array)
                |--- _id (number)
                |--- ....

API

Simple example

import Store from 'react-native-store';

const DB = {
    'foo': Store.model('foo'),
    'bar': Store.model('bar')
}

// somewhere inside react components

componentDidMount() {
    // Return all items
    DB.foo.find().then(resp => this.setState({items: resp}));
}

handleFilter(itemName) {
    DB.foo.find({
        where: {
            and: [{ foo: { neq: itemName } }, { age: { gte: 5 } }]
        },
        order: {
            age: 'ASC',
        }
    }).then(resp => this.setState({items: resp}));
}

handleOnPress() {
    DB.bar.add({
        foo: 'foo',
        bar: 'bar',
        age: 12
    });
}

Advanced Filtering

Filtering adds more advanced logic to queries. This implementation is heavily based off of LoopBack's implementation. However, there are some important things that are different/leftout:

Note: Query operations on object nested within an entry are not perfect. For example, trying to update an entry that looks something like this:

{
  location: { name: 'place', distance: 'far' }
}

With this as the value of a where filter:

{
  location: { name: 'place' }
}

Will overwrite the value of location, effectively removing the distance property. This occurs similarly with the order and fields filter, as you can only apply the filters to values that are not nested within an object.

Contributing