Câmera não aparecia para o outro participante ao reentrar na sessão
O que aconteceu
Um usuário entrava em uma sessão de vídeo, saía e entrava de novo (sem recarregar a página) e a outra pessoa parava de ver a câmera e ouvir o áudio dele. Quem voltou continuava vendo a própria imagem normalmente, então não percebia o problema. Um F5 resolvia imediatamente.
Causa raiz
O gerenciador de chamada é criado uma única vez fora do ciclo de vida do React e sobrevive à navegação entre páginas (sair da sala não recarrega a aplicação). O estado interno que controla se a chamada está conectada nunca era devolvido para “desconectado” quando a chamada terminava — nem ao sair normalmente, nem quando a tentativa de conectar falhava. Na segunda entrada na sessão, o sistema achava que já estava conectado e simplesmente não reconectava, então a câmera e o microfone nunca eram publicados de novo para o outro participante.
Correção
O encerramento da chamada (saída normal, destruição do componente ou falha ao conectar) agora sempre devolve esse estado interno para “desconectado”. Uma tentativa de conexão que não retorna uma sala válida passa a ser tratada como falha, em vez de ser marcada como bem-sucedida.
Como evitar
Todo estado de ciclo de vida (conectado/desconectado, em andamento/concluído) que vive fora do React precisa de reset explícito em todo caminho de saída — sucesso, erro e destruição —, não só no caminho feliz de entrada. O sintoma típico desse tipo de bug é “só funciona depois de recarregar a página”: o reload recria o módulo do zero e mascara o estado que ficou preso.