React Realm Ctx
A more react-like experience for Realm.
- Provides a React context to child components to read and write from the realm database.
- Adds and removes listeners on Realm.Results and re-renders components when results get updated
- Consume the context as you prefer: via hooks, higher order components or render props
Installation
Note: This package requires Realm and React 16.3.0 or later. Make sure you have those dependencies installed before adding react-realm-ctx
.
# If you use yarn yarn add react-realm-ctx # Or if you use npm: npm install react-realm-ctx
Usage
Create a realm instance and wrap the root of your app with the RealmProvider
:
import React from 'react';import Realm from 'realm';import RealmProvider from 'react-realm-ctx'; const TodoSchema = name: 'Todo' primaryKey: 'id' properties: id: 'int' title: 'string' done: type: 'bool' default: false ; Component { ; thisrealm = schema: TodoSchema; } { return <RealmProvider => /* ... */ </RealmProvider> ; }
Use the context in any child components:
Query
Hooks
import React from 'react';import FlatList from 'react-native';import useRealmObjectsQuery from 'react-realm-ctx'; const TodoList = const allTodos = ; const pendingTodos = ; return <FlatList = = /> ;
Render props
import React from 'react';import FlatList from 'react-native';import RealmObjectsQuery from 'react-realm-ctx'; const TodoList = return <RealmObjectsQuery ="Todo" ="done = false"> results <FlatList = = /> </RealmObjectsQuery> ;
Write
Hooks
import React from 'react';import TouchableOpacity Text from 'react-native';import useRealm from 'react-realm-ctx'; const TodoItem = id title done const realm = ; const toggleDone = realm; ; const handleDelete = realm; ; return <TouchableOpacity = => <Text =>title</Text> </TouchableOpacity> ;;
HOC
import React from 'react';import TouchableOpacity Text from 'react-native';import withRealm from 'react-realm-ctx'; const TodoItem = ;
Render props
import React from 'react';import TouchableOpacity Text from 'react-native';import RealmConsumer from 'react-realm-ctx'; const TodoItem = id title done const toggleDone = realm realm; ; const handleDelete = realm realm; ; return <RealmConsumer> realm <TouchableOpacity = => <Text =>title</Text> </TouchableOpacity> </RealmConsumer> ;;