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()

我们还决定提供 dataerrorupdatedAt 字段作为 Hook 的结果,以便按照 React QueryElectric SQL 的实践进行简洁明了的错误处理。