Създаване, групово вмъкване, изтегляне, търсене, актуализиране и изтриване

Това е прост пример за това как да използвате Realm в React Native App. Демото включва:

  1. Изтеглете голям JSON от API сървър и го вмъкнете в базата данни на Realm. JSON има 50 000 обекта.
  2. Пропускане на дублиран първичен ключ по време на вмъкване.
  3. Показване на Realm база данни в Realm Studio.

След като инициализирах нов RN проект и install realm, модифицирах самоApp.js и добавих allSchemas.js. Кодовете са приложени в края на тази статия.

Приложението изтегля JSON от API с помощта на axios. Например:

[{"EventID":1325,"EventName":"Summer Night","EventDate":"12/31/2018"},{"EventID":1326,"EventName":"Birthday Party","EventDate":"12/31/2011"}]

Приложението позволява търсене по идентификатор или име, актуализиране на име или изтриване на всички. На екрана „брой елементи“ показва в момента колко елемента са в Realm, а „време за изпълнение“ показва колко време отнема изпълнението на действие в ms.

В демонстрационния видеоклип изтеглянето на 20 елемента отне около 5 секунди. Това е така, защото е супер бавен в режим на отстраняване на грешки. Тествах това приложение, като го инсталирах на устройство с Android, изтеглянето на 50 000 елемента отнема по-малко от 10 секунди.

Файлът Realm може да бъде отворен от Ream Studio. Моля, следвайте това.

allSchemas.js

export const EVENTS_SCHEMA = 'events';
export const EventsSchema = {
  name: EVENTS_SCHEMA,
  primaryKey: 'EventID',
  properties: {
    EventID: 'int',
    EventName: 'string',
    EventDate: 'string'
  }
};

App.js:

import React, { Component } from 'react';
import { Text, View, Button, TextInput } from 'react-native';
import axios from 'axios';
import { EventsSchema, EVENTS_SCHEMA } from './allSchemas';
const Realm = require('realm');
const databaseOptions = {
  path: 'realmT4.realm',
  schema: [EventsSchema],
  schemaVersion: 0
};
type Props = {};
export default class App extends Component<Props> {
  constructor(props) {
    super(props);
    this.state = { events: null, size: 0, runTime: 0, findName: '', text: '', updateText: '' };
  }
componentWillMount() {
  Realm.open(databaseOptions).then(realm => {
    this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
  });
}
downloadEvents() {
  const startTime = new Date().getTime();
  axios.get('https://YourAPI/YourMethod')
   .then(response => {
     Realm.open(databaseOptions).then(realm => {
       realm.write(() => {
         response.data.forEach(obj => {
             if (realm.objects(EVENTS_SCHEMA).filtered(`EventID=${obj.EventID}`).length === 0) {
                  realm.create(EVENTS_SCHEMA, obj);
             }
         });
          this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
          const endTime = new Date().getTime();
          this.setState({ runTime: endTime - startTime });
       });
     });
});
}
  uploadEvents() {
  }
clearAllEvents() {
  const startTime = new Date().getTime();
  Realm.open(databaseOptions)
  .then(realm => {
       realm.write(() => {
         const allEvents = realm.objects(EVENTS_SCHEMA);
         realm.delete(allEvents); // Deletes all books
         this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
         const endTime = new Date().getTime();
         this.setState({ runTime: endTime - startTime });
       })
  })
  .catch(error => {
  });
}
findID() {
  const startTime = new Date().getTime();
    const text = this.state.text;
  Realm.open(databaseOptions).then(realm => {
    const res = realm.objects(EVENTS_SCHEMA).filtered(`EventID=${text}`)
    this.setState({ findName: res[0].EventID + ': ' + res[0].EventName })
    const endTime = new Date().getTime();
    this.setState({ runTime: endTime - startTime });
})
.catch((error) => {
  console.log(error);
});
}
findName() {
  const startTime = new Date().getTime();
  const text = this.state.text;
  Realm.open(databaseOptions).then(realm => {
    const res = realm.objects(EVENTS_SCHEMA).filtered(`EventName="${text}"`)
    this.setState({ findName: res[0].EventID + ': ' + res[0].EventName })
    const endTime = new Date().getTime();
    this.setState({ runTime: endTime - startTime });
})
.catch((error) => {
  console.log(error);
});
}
updateName() {
  const startTime = new Date().getTime();
  const updateText = this.state.updateText;
  const text = this.state.text;
  Realm.open(databaseOptions).then(realm => {
    let target = realm.objects(EVENTS_SCHEMA).filtered(`EventID=${text}`)[0];
    if (!target) {
      target = realm.objects(EVENTS_SCHEMA).filtered(`EventName=${text}`)[0];
    }
    realm.write(() => {
      target.EventName = updateText;
    })
    const endTime = new Date().getTime();
    this.setState({ runTime: endTime - startTime });
  })
}
render() {
    const info = 'Number of items in this Realm: ' + this.state.size
    return (
      <View >
        <Text>
          {info}
        </Text>
        <Text>
          Execution time: {this.state.runTime} ms
        </Text>
        <Button onPress={this.downloadEvents.bind(this)} title="Download" />
        <Button onPress={this.uploadEvents.bind(this)} title="Upload" />
        <Button onPress={this.clearAllEvents.bind(this)} title="Delete All" />
        <TextInput
          onChangeText={(text) => this.setState({ text })}
          value={this.state.text}
        />
        <Button onPress={this.findID.bind(this)} title="Find by ID" />
        <Button onPress={this.findName.bind(this)} title="Find by Name" />
        <Text>
          Find user: {this.state.findName}
        </Text>
        <Text>
          Update above user name to:
        </Text>
        <TextInput
          onChangeText={(updateText) => this.setState({ updateText })}
          value={this.state.updateText}
        />
          <Button onPress={this.updateName.bind(this)} title="Update Name" />
      </View>
    );
  }
}

~Приятно кодиране~