Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

Reaja às mudanças - React Native SDK

Nesta página

  • Registrar um ouvinte de alteração de Realm
  • Registrar um ouvinte de alteração de coleção
  • Registrar um ouvinte de alteração de objeto
  • Remover todos os ouvintes de alterações
  • Alterar limites de notificação

Objetos e coleções do Realm sempre refletem o estado mais recente de seus dados quando você os lê. O Realm emite uma notificação de alteração sempre que o estado dos seus dados for alterado, o que permite atualizar o aplicativo de forma reativa em resposta a uma transação de escrita confirmada.

Você pode registrar três tipos de ouvintes de notificações:

  • Um ouvinte de realm é acionado sempre que qualquer objeto em um realm é alterado.

  • Um ouvinte de collection é acionado sempre que uma query específica corresponde a um novo conjunto de objetos ou quando qualquer objeto correspondente é alterado.

  • Um ouvinte de objeto é acionado sempre que um objeto específico é excluído ou tem uma ou mais propriedades modificadas.

Para registrar um ouvinte de alterações para um realm inteiro, passe uma função de retorno de chamada de resposta para o método addListener() do realm. O realm chama o ouvinte de forma assíncrona sempre que uma operação adiciona, altera ou remove objetos no realm.

Para remover um ouvinte de realm, passe o retorno de chamada de resposta para o método removeListener() do realm.

Dica

Usar ouvintes de objetos e collections para detalhes de alteração

O realm não passa nenhuma informação sobre o que mudou para as funções de retorno de chamada de resposta do ouvinte do realm. Se precisar saber mais informações sobre o que mudou em um objeto ou collection, use os ouvintes de objeto e os ouvintes de collection.

Dica

Tratamento de exceções dentro de um ouvinte

Para tratar exceções emitidas por um ouvinte de alterações, envolva sua addListener() chamada em um try...catch declaração.

// Define a listener callback function
function onRealmChange() {
console.log("Something changed!");
}
// Add the listener callback to the realm
try {
realm.addListener("change", onRealmChange);
} catch (error) {
console.error(
`An exception was thrown within the change listener: ${error}`
);
}
// Remember to remove the listener when you're done!
realm.removeListener("change", onRealmChange);

Para registrar um ouvinte de alterações para uma collection de objetos de Realm, passe uma função de retorno de chamada de resposta para o método addListener() da collection. O realm chama o ouvinte de forma assíncrona quando ele é registrado e sempre que uma operação adiciona, altera ou remove objetos na collection.

Para remover um ouvinte de collection, passe a chamada de resposta de volta para o método removeListener() da collection.

Importante

Questões importantes

Em manipuladores de notificações de collection, sempre execute alterações na seguinte ordem: exclusões, inserções e modificações. Manipular inserções antes de exclusões pode resultar em comportamento inesperado.

// You can define a listener for any collection of Realm objects
const dogs = realm.objects("Dog");
// Define a listener callback function for changes to any Dog
function onDogsChange(dogs, changes) {
// Handle deleted Dog objects
changes.deletions.forEach((index) => {
// You cannot directly access deleted objects,
// but you can update a UI list, etc. based on the index.
console.log(`Looks like Dog #${index} has left the realm.`);
});
// Handle newly added Dog objects
changes.insertions.forEach((index) => {
const insertedDog = dogs[index];
console.log(`Welcome our new friend, ${insertedDog.name}!`);
});
// Handle Dog objects that were modified
changes.modifications.forEach((index) => {
const modifiedDog = dogs[index];
console.log(`Hey ${modifiedDog.name}, you look different!`);
});
}
// Add the listener callback to the collection of dogs
try {
dogs.addListener(onDogsChange);
} catch (error) {
console.error(
`An exception was thrown within the change listener: ${error}`
);
}
// Remember to remove the listener when you're done!
dogs.removeListener(onDogsChange);

Para registrar um ouvinte de alterações em um objeto específico do Realm, passe uma função de retorno de chamada de resposta para o método addListener() do objeto. O realm chama o ouvinte se alguma das propriedades do objeto mudar ou se alguém excluir o objeto.

Para remover um ouvinte de objetos, passe o retorno de chamada de resposta para o método removeListener() do objeto.

// Define a listener callback function for changes to a specific Dog
function onDogChange(dog, changes) {
if (changes.deleted) {
console.log(`dog is deleted: ${changes.deleted}`);
} else {
changes.changedProperties.forEach((prop) => {
console.log(`* the value of "${prop}" changed to ${dog[prop]}`);
});
}
}
// You can define a listener for any Realm object
try {
dog.addListener(onDogChange);
} catch (error) {
console.error(
`An exception was thrown within the change listener: ${error}`
);
}
// Remember to remove the listeners when you're done!
dog.removeListener(onDogChange);

Para remover todos os ouvintes em um determinado realm, objeto ou instância de collection, chame a função removeAllListeners() da instância:

// Remove all listeners from a realm
realm.removeAllListeners();
// Remove all listeners from a collection
dogs.removeAllListeners();
// Remove all listeners from an object
dog.removeAllListeners();

Alterações em documentos aninhados com mais de quatro níveis abaixo não acionam notificações de alterações.

Se você tiver uma estrutura de dados em que precise escutar as alterações em cinco níveis para baixo ou mais profundamente, as soluções alternativas incluem:

  • Refatore o esquema para reduzir o aninhamento.

  • Adicione algo como "pressione para atualizar" para permitir que os usuários atualizem os dados manualmente.

← Dados de query - React Native SDK