このページの例では、次のスキーマを使用します。
class Dog extends Realm.Object { static schema = { name: 'Dog', properties: { name: 'string', owners: { type: 'list', objectType: 'Person', optional: true, }, age: 'int?', }, }; }
class Dog extends Realm.Object<Dog> { name!: string; owner?: Realm.List<Person>; age?: number; static schema: ObjectSchema = { name: 'Dog', properties: { name: 'string', owners: { type: 'list', objectType: 'Person', optional: true, }, age: 'int?', }, }; }
オブジェクトの削除
Realm からオブジェクトを削除するには、オブジェクトを Realm.delete()に渡します 書込みトランザクション (write transaction) 内。
DogListコンポーネントの次の例では、次のようにします。
useRealm()フックを呼び出して、開いた Realm インスタンスへのアクセスを取得します。Realm インスタンス内のすべてのドキュメントを検索するには、
DogをuseQuery()フックに渡します。Dogオブジェクトをパラメーターとして受け取るコンポーネント メソッドdeleteDog()を作成します。 メソッド内で、Realm.delete()にDogオブジェクトを渡し、Realm から削除します。を犬の上にマッピングして、犬の
Textnameと [Delete domain] ボタンを含む コンポーネントのリストをレンダリングします。コンポーネントの
deleteDog()メソッドを呼び出す [Deletedog] ボタンに onPresイベントを追加します。
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteDog = deletableDog => { realm.write(() => { realm.delete(deletableDog); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Button onPress={() => deleteDog(dog)} title='Delete Dog' /> </> ); })} </> ); };
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteDog = (deletableDog: Dog) => { realm.write(() => { realm.delete(deletableDog); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Button onPress={() => deleteDog(dog)} title='Delete Dog' /> </> ); })} </> ); };
重要
削除後のオブジェクトを使用しない
Realm から削除したオブジェクトには、アクセスしたり変更したりすることはできません。 削除されたオブジェクトを使用しようとすると、Realm はエラーをスローします。
複数のオブジェクトの削除
Realm から複数のオブジェクトを削除するには、次のような方法があります。
特定のオブジェクトタイプのすべてのオブジェクトを Realm から削除するには、 useQuery(<ObjectType>) の結果を Realm.delete () メソッドに 書込みトランザクション (write transaction) 内のメソッドです。
Realm から多くの特定のオブジェクトを削除するには、書込みトランザクション内で
Realm.delete()にCollection.filtered()を渡します。
DogListコンポーネントの次の例では、次のことが行われます。
useRealm()フックを使用して Realm インスタンスを取得します。DogクラスをuseQuery()フックに渡して、変数myDogsをすべてのDogオブジェクトに設定します。書込みトランザクションを実行するコンポーネント メソッド
deleteAllYoungDogObjects()を作成します。 書き込みトランザクション内で、3 未満のすべての犬を取得するクエリで、変数youngDogsをmyDogs.filtered()の結果に設定します。 次にyoungDogsをrealm.delete()に渡し、Realm からすべての小さい犬を削除します。書込みトランザクションを実行するコンポーネント メソッド
deleteAllDogObjects()を作成します。 書込みトランザクション内で、myDogsをrealm.delete()に渡し、Realm からすべての犬を削除します。マップ 犬を介してマッピングを行い、犬の
nameとageを含むTextコンポーネントのリストをレンダリングします。deleteAllYoungDogObjects()を呼び出す [Delete MongoDB Objects] ボタンにonPressイベントを追加すると、Realm からすべての子ドキュメントが削除され、これにより再レンダリングがトリガーされ、UI からそれらが削除されます。deleteAllDogObjects()を呼び出す [Delete すべてのドキュメント オブジェクト] ボタンにonPressイベントを追加すると、Realm からすべてのドキュメントが削除され、これにより再レンダリングがトリガーされ、UI からそれらが削除されます。
注意
Realm インスタンスからオブジェクトを削除すると、 コンポーネントはそれらを自動的に再レンダリングし、UI から削除します。
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteAllYoungDogObjects = () => { const youngDogs = useQuery(Dog, dogs => { return dogs.filtered('age < 3'); }); realm.write(() => { realm.delete(youngDogs); }); }; const deleteAllDogObjects = () => { realm.write(() => { realm.delete(myDogs); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Text>{dog.age}</Text> </> ); })} <Button onPress={() => deleteAllYoungDogObjects()} title='Delete Young Dog Objects' /> <Button onPress={() => deleteAllDogObjects()} title='Delete All Dog Objects' /> </> ); };
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteAllYoungDogObjects = () => { const youngDogs = useQuery(Dog, dogs => { return dogs.filtered('age < 3'); }); realm.write(() => { realm.delete(youngDogs); }); }; const deleteAllDogObjects = () => { realm.write(() => { realm.delete(myDogs); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Text>{dog.age}</Text> </> ); })} <Button onPress={() => deleteAllYoungDogObjects()} title='Delete Young Dog Objects' /> <Button onPress={() => deleteAllDogObjects()} title='Delete All Dog Objects' /> </> ); };
Realm 内のすべてのオブジェクトの削除
Realm からすべてのオブジェクトを削除するには、 Realm.deleteAll()を呼び出します 書込みトランザクション (write transaction) 内。 これにより、すべてのオブジェクト インスタンスの Realm はクリアされますが、Realm のスキーマには影響しません。
DeleteProfileSettingsScreenコンポーネントの次の例では、次のことが行われます。
コンポーネント内で
useRealm()フックを呼び出して、開いた Realm インスタンスにアクセスします。書込みトランザクションを実行し、
Realm.deleteAll()を呼び出して、Realm からすべてのオブジェクトを削除するコンポーネント メソッドdeleteAllData()を作成します。deleteAllData()を呼び出す [Delete all data] ボタンにonPressイベントを追加します。
const DeleteProfileSettingsScreen = () => { const realm = useRealm(); const deleteAllData = () => { realm.write(() => { realm.deleteAll(); }); }; return ( <> <Text>Delete all data in your profile:</Text> <Button onPress={deleteAllData} title='Delete all data' /> </> ); };
const DeleteProfileSettingsScreen = () => { const realm = useRealm(); const deleteAllData = () => { realm.write(() => { realm.deleteAll(); }); }; return ( <> <Text>Delete all data in your profile:</Text> <Button onPress={deleteAllData} title='Delete all data' /> </> ); };
Tip
開発中のすべてを削除
Realm.deleteAll()は、開発中に Realm をすばやくクリアする便利なメソッドです。 たとえば、 オブジェクトを新しいスキーマに更新するための移行を作成するよりも、アプリ自体を使用してオブジェクトを削除して再生成する方が高速な場合があります。