Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/

React para alterações - Node.js 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

Os dados em Realm são ativos, o que significa que um objeto sempre reflete seu estado salvo mais recente e as operações de leitura nunca bloqueiam. Os objetos são atualizados automaticamente em resposta a alterações, para que você possa ver os dados atualizados em seu aplicativo sem executar uma nova query. objeto e query emitem notificações que podem atualizar sua aplicação sempre que os dados mudarem.

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 chamada de resposta de chamada de resposta para o métodoaddListener() 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 a chamada de resposta para o método removeListener() do realm.

Dica

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

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

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 coleção de objetos de Realm, passe uma função de chamada de resposta para o método addListener() da coleção. O realm chama o ouvinte de forma assíncrona quando ele é registrado e sempre que uma operação adiciona, altera ou remove objetos na coleção.

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

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 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 a 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.

Voltar

Dados da consulta