Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no console: "setstate can only update a mounted or mounting component".

Fiz o curso seguindo o código mostrado nos vídeos e após a última aula, mesmo o sistema funcionando, verifiquei que havia uma mensagem de erro no console que ainda persistia. Ao iniciar o sistema e usar apenas um dos cadastros, o problema não ocorre, mas se você cadastrar um livro e em seguida clicar no cadastro de autor e fizer um cadastro, o erro aparecerá:

"setstate can only update a mounted or mounting component".

Busquei o código mais recente do projeto no Github e vi que o erro também acontecia. Pesquisando um pouco, identifiquei que o erro refere-se ao fato de que, ao trocar de tela, o "inputcustomizado" continua inscrito para receber as mensagens do tópico "limpa-erros". Mas, como o componente não existe mais, a tentativa de executar o setstate causa o erro.

Na documentação do React (https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html) encontrei uma dica orientando a sempre que você se "inscrever" para receber uma mensagem após montar um componente, certifique-se de cancelar a inscrição quando ele for desmontado. No caso do React, isso pode ser feito com o método "componentWillUnmount".

Exemplo:

    componentDidMount() {
        PubSub.subscribe("erro-validacao",function(topico,erro){            
            if(erro.field === this.props.name){
                this.setState({msgErro:erro.defaultMessage});            
            }
        }.bind(this));

        PubSub.subscribe("limpa-erros",function(topico){                        
            this.setState({msgErro:''});
        }.bind(this));    
    }

    componentWillUnmount() {
        PubSub.unsubscribe("erro-validacao");
        PubSub.unsubscribe("limpa-erros");
    }

A propósito, fiz um pull request com essas sugestões no repositório do GitHub citado durante o curso.

Espero que seja útil.

1 resposta
solução!

Foi muito util! ainda nao fiz o merge, mas vai rolar. Obrigado mesmo pela contribuicao.