Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

CRUD - 削除 - React Native SDK

項目一覧

  • オブジェクトの削除
  • 複数のオブジェクトの削除
  • Realm 内のすべてのオブジェクトの削除

このページの例では、次のスキーマを使用します。

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コンポーネントの次の例では、次のようにします。

  1. useRealm()フックを呼び出して、開いた Realm インスタンスへのアクセスを取得します。

  2. Realm インスタンス内のすべてのドキュメントを検索するには、 DoguseQuery()フックに渡します。

  3. Dogオブジェクトをパラメーターとして受け取るコンポーネント メソッドdeleteDog()を作成します。 メソッド内で、 Realm.delete()Dogオブジェクトを渡し、Realm から削除します。

  4. マップ )を介して、犬のText と [Delete domain] ボタンを含む コンポーネントのリストがレンダリングされます。name

  5. 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 から複数のオブジェクトを削除するには、次のような方法があります。

  1. 特定のオブジェクトタイプのすべてのオブジェクトを Realm から削除するには、 useQuery(<ObjectType>) の結果を Realm.delete () メソッドに 書込みトランザクション (write transaction) 内のメソッドです。

  2. Realm から多くの特定のオブジェクトを削除するには、書込みトランザクション内でRealm.delete()Collection.filtered()を渡します。

DogListコンポーネントの次の例では、次のことが行われます。

  1. useRealm()フックを使用して Realm インスタンスを取得します。

  2. DogクラスをuseQuery()フックに渡して、変数myDogsをすべてのDogオブジェクトに設定します。

  3. 書込みトランザクションを実行するコンポーネント メソッドdeleteAllYoungDogObjects()を作成します。 書き込みトランザクション内で、3 未満のすべての犬を取得するクエリで、変数youngDogsmyDogs.filtered()の結果に設定します。 次にyoungDogsrealm.delete()に渡し、Realm からすべての小さい犬を削除します。

  4. 書込みトランザクションを実行するコンポーネント メソッドdeleteAllDogObjects()を作成します。 書込みトランザクション内で、 myDogsrealm.delete()に渡し、Realm からすべての犬を削除します。

  5. マップText ドキュメント を介して、ドキュメントのname と を含むage コンポーネントのリストをレンダリングします。

  6. deleteAllYoungDogObjects()を呼び出す [Delete MongoDB Objects] ボタンにonPressイベントを追加すると、Realm からすべての子ドキュメントが削除され、これにより再レンダリングがトリガーされ、UI からそれらが削除されます。

  7. 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.deleteAll()を呼び出します 書込みトランザクション (write transaction) 内。 これにより、すべてのオブジェクト インスタンスの Realm はクリアされますが、Realm のスキーマには影響しません。

DeleteProfileSettingsScreenコンポーネントの次の例では、次のことが行われます。

  1. コンポーネント内でuseRealm()フックを呼び出して、開いた Realm インスタンスにアクセスします。

  2. 書込みトランザクションを実行し、 Realm.deleteAll()を呼び出して、Realm からすべてのオブジェクトを削除するコンポーネント メソッドdeleteAllData()を作成します。

  3. 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 をすばやくクリアする便利なメソッドです。 たとえば、 オブジェクトを新しいスキーマに更新するための移行を作成するよりも、アプリ自体を使用してオブジェクトを削除して再生成する方が高速な場合があります。

戻る

Update