Mise en ligne : dimanche 6 octobre 2024
Cet article marque le début d'une série dédiée à WatermelonDB, une librairie conçue pour offrir une approche local-first dans le développement d'applications avec React Native. Nous partirons d'un exemple simple, une Todo List, et nous la ferons évoluer progressivement en lui ajoutant des fonctionnalités avancées. Cela nous permettra de découvrir les différentes possibilités offertes par WatermelonDB, telles que la gestion des migrations et les relations entre les tables.
À travers cette série, vous découvrirez comment utiliser WatermelonDB pour créer des applications réactives, robustes et capables de gérer des données locales de manière efficace.
Pour nous concentrer sur l'essentiel, c'est-à-dire, l'utilisation de watermelonDB, je vous ai préparé un projet de démarrage, que vous pouvez récupérer ici : branche start du projet expo-watermelon-todo-app
npm install @nozbe/watermelondb
npm install -D @babel/plugin-proposal-decorators
npx expo install expo-build-properties
babel.config.jsplugins: [['@babel/plugin-proposal-decorators', { legacy: true }]],
Ajoutons ce code, dans les plugins du fichier app.json (à la suite de "expo-router",
:
app.json[
"expo-build-properties",
{
"ios": {
"extraPods": [
{
"name": "simdjson",
"configurations": ["Debug", "Release"],
"path": "../node_modules/@nozbe/simdjson",
"modular_headers": true
}
]
}
}
]
Nous allons créer un dossier database
dans lequel nous mettrons tous les fichiers liés à watermelonDB.
Nous créons un fichier schema.js, qui contiendra le schema de la base de données :
src/database/model/schema.jsimport { appSchema, tableSchema } from '@nozbe/watermelondb'
export default appSchema({
version: 1,
tables: [
]
})
Ensuite, nous créons un fichier qui contiendra toutes nos migrations :
src/database/model/migrations.jsimport { schemaMigrations } from '@nozbe/watermelondb/Schema/migrations'
export default schemaMigrations({
migrations: [
],
})
Pour finir, nous créons un fichier qui contiendra toute la configuration de notre base de données.
src/database/database.jsimport { Platform } from 'react-native'
import { Database } from '@nozbe/watermelondb'
import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite'
import schema from './model/schema'
import migrations from './model/migrations'
// First, create the adapter to the underlying database:
const adapter = new SQLiteAdapter({
schema,
// (You might want to comment it out for development purposes -- see Migrations documentation)
migrations,
// (optional database name or file system path)
// dbName: 'myapp',
// (recommended option, should work flawlessly out of the box on iOS. On Android,
// additional installation steps have to be taken - disable if you run into issues...)
jsi: true, /* Platform.OS === 'ios' */
// (optional, but you should implement this method)
onSetUpError: error => {
// Database failed to load -- offer the user to reload the app or log out
}
})
// Then, make a Watermelon database from it!
export const database = new Database({
adapter,
modelClasses: [
],
})
Pour utiliser watermelonDB, nous aurons besoin de sortir d'Expo Go et d'utiliser un build de développement.
pour cibler android et iOSnpx expo prebuild
pour android seulementnpx expo run:android
pour iOS seulementnpx expo run:ios
Pensez à ajouter les deux dossiers qui seront créés à la suite du prebuild dans votre fichier .gitignore
.gitignoreandroid/ ios/
Tout est prêt désormais pour pouvoir utiliser watermelonDB dans notre application React Native.