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
的实践进行简洁明了的错误处理。