Refs

Você pode passar a referência a uma variável para qualquer ref e ela definirá o valor dessa variável para o elemento DOM quando o enredo entrar no DOM.

Você pode passar qualquer variável para o ref, desde que seu objeto pai seja mencionado.

import Nullstack from 'nullstack';

class Player extends Nullstack {

  video = null

  hydrate() {
    // Assumindo que você tenha permissão do navegador
    this.video.play()
  } 
 
  render() {
    return (
      <div>
        <video ref={this.video} />
      </div>
    )
  }

}

export default Player;

Refs funcionais

Refs pode ser a referência a uma função que será acionada quando o nó entrar no DOM

Uma tecla element será adicionada ao contexto quando a função for chamada

Todas props desse enredo serão mescladas no contexto dessa função.

import Nullstack from 'nullstack';

class Toast extends Nullstack {

  visible = false

  startTimer({ element, timeout }) {
    console.log(element, `será escondido em ${timeout}ms`)
    setTimeout(() => this.visible = false, timeout)
  }
 
  render() {
    return (
      <div>
        {this.visible &&
          <div ref={this.startTimer} timeout={3000}> 
            Mensagem muito importante que estava escondida antes 
          </div>
        }
      </div>
    )
  }

}

export default Toast;

Simples components refáveis

Ref pode ser propagada apenas passando a referência do contexto.

export default function CustomPlayer({ label, ref }) {
  return (
    <div>
      <video ref={ref} />
    </div>
  )
}
import Nullstack from 'nullstack';
import CustomPlayer from './CustomPlayer';

class VideoPage extends Nullstack {

  video = null;

  render() {
    return (
      <CustomPlayer ref={this.video} />
    )
  }

}

export default VideoPage;

Complexos componentes refáveis

Você pode criar seu próprio componente refável recebendo os atributos que o ref gera.

Ref é um atalho de tempo de transpilação que cria um objeto com as chaves object e property.

class CustomPlayer extends Nullstack {

  element = null

  hydrate({ ref }) {
    ref.object[ref.property] = this.element
  }

  render({ audioOnly }) {
    return (
      <div>
        {audioOnly ? <audio ref={this.element} /> : <video ref={this.element} />}
      </div>
    )
  }

}

export default CustomPlayer;

Próximos passos

➡️ Aprenda sobre Chaves de contexto: Rotas e parâmetrosTem alguma pergunta ou sugestão? Participe do nosso Discord