Skip to content

Módulo de Reatividade

O módulo de reatividade fornece utilitários para reatividade entre janelas de UI e o editor.

Para utilizar o módulo de reatividade, basta importar o módulo lenz:reactivity no arquivo de script de sua extensão.

ts
import { ref } from 'lenz:reactivity';

Métodos

createChannelPort<T, U = T>(receiver: (data: T) => void): ChannelPort<T, U>

Cria uma nova porta de canal.

Parâmetros

NomeTipoDescrição
receiverFunctionFunção para receber dados.

Retorno

ChannelPort<T, U> - Porta de canal.

createChannel<T, U = T>(): Channel<T, U>

Cria um novo canal de comunicação.

Retorno

Uma tupla com dois elementos:

ÍndiceTipoDescrição
0ChannelPort<T, U>Porta de envio.
1ChannelPort<U, T>Porta de recebimento.

ref<T>(initialValue: T): Ref<T>

Cria uma referência reativa.

Parâmetros

NomeTipoDescrição
initialValueT | undefinedValor inicial.

Retorno

Ref<T> - Referência reativa com valor inicial. Ref<T | undefined> - Referência reativa com valor inicial undefined.

createCustomRef<T>(factory: CustomRefFactory<T>): Ref<T>

Cria uma referência reativa personalizada.

Exemplo

ts
const customRef = createCustomRef((sender) => {
  let value = 0;
  return {
    get() {
      return JSON.parse(localStorage.getItem('value') || 'null');
    },
    set(newValue: number) {
      localStorage.setItem('value', JSON.stringify(newValue));
      sender.send(value);
    },
  };
});

Parâmetros

NomeTipoDescrição
factoryCustomRefFactory<T>Fábrica de referência.

Retorno

Ref<T> - Referência reativa personalizada.

Tipos

Ref<T>

Extende: ChannelPort<T, T>.

Representa uma referência reativa.

Propriedades

NomeTipoDescrição
valueTValor atual da referência.
closedbooleanIndica se a referência foi fechada.

ChannelPort<T, U>

Representa uma porta de canal.

Métodos

send(data: T): void

Envia dados pela porta.

Parâmetros

NomeTipoDescrição
dataTDados a serem enviados.

notify(data: U): void

Notifica a porta com dados.

Parâmetros

NomeTipoDescrição
dataUDados a serem notificados.

addListener(listener: (data: U) => void): LenzDisposer

Adiciona um ouvinte para receber dados pela porta.

Parâmetros

NomeTipoDescrição
listener(data: U) => voidFunção para receber dados.

Retorno

LenzDisposer - Disposer para remover o ouvinte.

next(signal?: AbortSignal): Promise<U>

Aguarda o próximo dado recebido pela porta.

Parâmetros

NomeTipoDescrição
signalAbortSignal | undefinedSinal de cancelamento.

Retorno

Promise<U> - Próximo dado recebido pela porta.

waitClose(): Promise<void>

Aguarda o fechamento da porta.

Retorno

Promise<void> - Promessa para aguardar o fechamento da porta.

listen(signal?: AbortSignal): AsyncIterable<U>

Cria um iterável assíncrono para receber dados pela porta.

Exemplo

ts
const port = createChannelPort<number>((data) => {});

setTimeout(() => {
  port.send(1);
  port.send(2);
  port.send(3);
  port.close();
}, 1);

for await (const data of port.listen()) {
  console.log(data);
}

console.log('Porta fechada.');

Parâmetros

NomeTipoDescrição
signalAbortSignal | undefinedSinal de cancelamento.

Retorno

AsyncIterable<U> - Iterável assíncrono para receber dados pela porta.

close(): void

Fecha a porta.

CustomRefFactory<T>

Representa uma fábrica de referência reativa personalizada.

Parâmetros

NomeTipoDescrição
senderChannelPort<T, T>Porta de envio.
receiverChannelPort<T, T>Porta de recebimento.

Retorno

Um objeto com dois métodos:

NomeTipoDescrição
get() => TMétodo para obter valor.
set(value: T) => voidMétodo para definir valor.

Desenvolvido sob a licença MIT