CRUD - 削除 - React Native SDK
このページの例では、次のスキーマを使用します。
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 から削除します。マップ )を介して、犬の
Text
と [Delete domain] ボタンを含む コンポーネントのリストがレンダリングされます。name
onPres を追加する イベント: コンポーネントの メソッドを呼び出す "Deletedog" ボタンにある。
deleteDog()
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 からすべての犬を削除します。マップ
Text
ドキュメント を介して、ドキュメントのname
と を含むage
コンポーネントのリストをレンダリングします。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 をすばやくクリアする便利なメソッドです。 たとえば、 オブジェクトを新しいスキーマに更新するための移行を作成するよりも、アプリ自体を使用してオブジェクトを削除して再生成する方が高速な場合があります。