DrizzleORM v0.31.1 发布
2024年6月4日
新功能
实时查询 🎉
有关 Drizzle + Expo 的完整说明,欢迎访问 讨论区
自 v0.31.1 起,Drizzle ORM 现已原生支持 Expo SQLite 实时查询!我们实现了一个原生的 useLiveQuery React Hook,它可以观察必要的数据库更改并自动重新运行数据库查询。它适用于类 SQL 查询和 Drizzle 查询。
import { useLiveQuery, drizzle } from 'drizzle-orm/expo-sqlite';
import { openDatabaseSync } from 'expo-sqlite';
import { users } from './schema';
import { Text } from 'react-native';
const expo = openDatabaseSync('db.db', { enableChangeListener: true }); // <-- enable change listeners
const db = drizzle(expo);
const App = () => {
// Re-renders automatically when data changes
const { data } = useLiveQuery(db.select().from(users));
// const { data, error, updatedAt } = useLiveQuery(db.query.users.findFirst());
// const { data, error, updatedAt } = useLiveQuery(db.query.users.findMany());
return <Text>{JSON.stringify(data)}</Text>;
};
export default App;我们有意不改变 ORM 本身的 API,以保持与传统 React Hook API 的一致性,因此我们使用 useLiveQuery(databaseQuery),而不是 db.select().from(users).useLive() 或 db.query.users.useFindMany()
我们还决定提供 data、error 和 updatedAt 字段作为 Hook 的结果,以便按照 React Query 和 Electric SQL 的实践进行简洁明了的错误处理。