Become a Gold Sponsor
DrizzleORM v0.31.1 发布
Jun 4, 2024

新特性

实时查询 🎉

关于 Drizzle + Expo 的详细说明欢迎访问 讨论区

v0.31.1 开始,Drizzle ORM 现在原生支持 Expo SQLite 实时查询! 我们实现了一个原生的 useLiveQuery React Hook,该 Hook 观察必要的数据库更改并自动重新运行数据库查询。它支持 SQL 类似查询和 Drizzle 查询:

import { useLiveQuery, drizzle } from 'drizzle-orm/expo-sqlite';
import { openDatabaseSync } from 'expo-sqlite/next';
import { users } from './schema';
import { Text } from 'react-native';

const expo = openDatabaseSync('db.db', { enableChangeListener: true }); // <-- 启用更改监听器
const db = drizzle(expo);

const App = () => {
  // 当数据更改时自动重新渲染
  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 的实践。