React para alterações - Node.js SDK
Nesta página
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.
Registrar um ouvinte de alteração de Realm
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);
Registrar um ouvinte de alteração de coleção
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);
Registrar um ouvinte de alteração de objeto
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);
Remover todos os ouvintes de alterações
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();
Alterar limites de notificação
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.