Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

混合 - React Native SDK

在此页面上

  • Realm 对象模型
  • 创建具有混合值的对象
  • 查询具有混合值的对象
  • 混合属性和类型检查

realm@10.5.0 版本中的新增功能。

混合数据类型是一种 Realm 属性类型,可以保存除collection之外的任何有效 Realm 数据类型。您可以创建mixed类型的collection(列表、集和字典),但mixed类型本身不能是collection。

混合类型是可索引的,但不能将其用作主键。

使用“混合”类型的属性可以包含 null 值,并且不能定义为可选。 Realm 混合类型中 JavaScript Number类型的所有实例都映射到 Realm double类型。

要将对象模型的属性设置为“混合”,请将该属性的类型设置为mixed

创建具有混合值的对象,方法是使用 写事务中的操作符。

在以下CreateCatsInput示例中,我们为birthDate字段创建多个具有混合类型的Cat Realm 对象。

CreateCatsInput 组件将执行以下操作:

  • 调用 useRealm() 钩子以访问打开的 Realm 实例。

  • 使用 React 的 useEffect 钩子
    使用useEffect和空依赖项数组仅调用匿名函数一次。
  • 在匿名函数中,我们通过以下方式创建了四个不同的Cat对象:
    使用new操作符在写事务中创建新的 Realm 对象。 每个Cat对象对birthDate属性使用不同的数据类型。
  • 使用useQuery()钩子检索所有Cat对象。

  • 地图 通过这些猫来渲染
    显示每只猫的namebirthDateText组件列表。

要查询具有“混合”值的对象,请运行Collection.filtered()方法并传入针对非“混合”字段的筛选器。然后,您可以打印 Mixed 属性的值或整个对象本身。

在以下CatInfoCard示例中,我们使用猫的名称查询Cat对象。

CatInfoCard 组件将执行以下操作:

  • 通过将Cat类传递给useQuery()钩子来获取所有Cat对象,然后使用filtered()筛选结果以仅接收名称与作为属性传递的名称匹配的猫。 然后,我们获取第一只匹配的猫并将其存储为常量变量。

  • 使用点表示法检索“混合”属性birthDate

  • 如果 Realm 找到了猫,则在呈现方法中显示猫的名称和出生日期。 如果没有与作为属性传递给组件的名称匹配的猫,我们会渲染“未找到猫”的文本。

由于混合属性可以有多个类型,因此您不能依赖该属性的值是特定类型。

使用Object.getPropertyType() ,您可以获得混合属性的基础类型。这允许您构建自己的类型检查。

// Use Type Predicates and Object.getPropertyType() to
// create a runtime type check for Mixed properties.
const isString = (
val: Mixed,
name: string,
object: Realm.Object,
): val is Realm.Types.String => {
return object.getPropertyType(name) === 'string';
};
type CatInfoCardProps = {catName: string};
const CatInfoCard = ({catName}: CatInfoCardProps) => {
const cat = useQuery(
Cat,
cats => {
return cats.filtered(`name = '${catName}'`);
},
[catName],
)[0];
// Use the type check to handle your data.
const catBirthDate = isString(cat.birthDate, 'birthDate', cat)
? cat.birthDate
: cat.birthDate.toString();
if (cat) {
return (
<>
<Text>{catName}</Text>
<Text>{catBirthDate}</Text>
</>
);
} else {
return <Text>Cat not found</Text>;
}
};
← 集 - React Native SDK