Loading...
Loading...
WatermelonDB models, observation patterns, and React integration. Use when writing or debugging model code, observers (findAndObserve, query.observe), or screens that display live-updating DB data.
npx skill4agent add jchaselubitz/drill-app watermelondbdatabase/models/findAndObservequery.observe()withObservablesfindAndObservefindAndObserve(id)model.update()@writeruseStateuseStateObject.issetPhrase(model)findAndObserveconst [phraseState, setPhraseState] = useState<
{ phrase: Phrase; _key: number } | null
>(null);
useEffect(() => {
if (!id) return;
const sub = db.collections
.get<Phrase>(PHRASE_TABLE)
.findAndObserve(id)
.subscribe((result) => {
setPhraseState({ phrase: result, _key: result.updatedAt });
});
return () => sub.unsubscribe();
}, [id, db]);
const phrase = phraseState?.phrase ?? null;phrasephraseStateobserve()query.observe()setState(results)linked.filter(...)assignmentssetStatewithObservableswithObservables(triggerProps, getObservables)setState{ values, isFetching }withObservables(['attempt'], ({ attempt }) => ({ attempt: attempt.observe(), ... }))AttemptCardfeatures/lesson/components/AttemptCard.tsxiduseEffectfindAndObserve(id)database/models/PhraseLessonAttemptTranslationDeck@field@writerPhrase.findOrCreatePhraseLesson.addLessonuseDatabase()@nozbe/watermelondb/reactcollection.findAndObserve(id)query.observe().subscribe(...)database/schema.tsdb.collections.get<Model>(TABLE)| Scenario | Pattern | Re-render guarantee |
|---|---|---|
Single model by | | Yes |
| Query results (list) | | Yes (new array/refs) |
| Model passed as prop | | Yes (HOC uses new state shape) |
findAndObserveobserve()withObservablesPhraseDetailScreenLessonDetailScreenSetDetailScreenAttemptCard