3
respostas

'Timeline.js' - 'like, comenta'

Oi.

No código:

 like(fotoId) {
      fetch(`http://localhost:8080/api/fotos/${fotoId}/like?X-AUTH-TOKEN=${localStorage.getItem('auth-token')}`,{method:'POST'})
        .then(response => {
          if(response.ok) {
            return response.json();
          } else {            
            throw new Error("não foi possível realizar o like da foto");
          }
        })
        .then(liker => {          
          Pubsub.publish('atualiza-liker',{fotoId,liker});
        });      
    }

    comenta(fotoId,textoComentario) {
      const requestInfo = {
        method:'POST',
        body:JSON.stringify({texto:textoComentario}),
        headers: new Headers({
          'Content-type':'application/json'
        })
      };

      fetch(`http://localhost:8080/api/fotos/${fotoId}/comment?X-AUTH-TOKEN=${localStorage.getItem('auth-token')}`,requestInfo)
        .then(response => {
          if(response.ok){
            return response.json();
          } else {
            throw new Error("não foi possível comentar");
          }
        })
        .then(novoComentario => {
          Pubsub.publish('novos-comentarios',{fotoId,novoComentario});
        });      
    }

Aqui nessa função abaixo, aparece o Pubsub.subscribe:

 componentWillMount(){
 Pubsub.subscribe('novos-comentarios',(topico,infoComentario) => {
        const fotoAchada = this.state.fotos.find(foto => foto.id === infoComentario.fotoId);        
        fotoAchada.comentarios.push(infoComentario.novoComentario);
        this.setState({fotos:this.state.fotos});        
      }); 
}

Como/quando roda esse código , (o código dos subscribers)?

O 'Pubsub.publish' roda depois de "ComponentWillMount" ser chamado, certo?

Seria a declaração de subscribe no "ComponetWillMount" uma estratégia?

Tipo, desde o começo do código do componente, já se inscreve pra quando em algum lugar, rodar o publish no canal 'novos-comentarios', por exemplo, e o código no subscribe de 'novos-comentarios', (no "ComponentWillMount") roda? Independente se o "ComponentWillMount" já tiver sido chamado?

Obrigado!

3 respostas

Fala aí Marcelo, tudo bem? Vamos lá:

Como/quando roda esse código , (o código dos subscribers)?

Depende, a função subscribe do PubSub será chamada assim que seu componente for renderizado na tela.

Já a função de callback passada para o subscribe será chamada toda vez que um .pubish for invocado com o mesmo nome do evento referente ao seu subscribe.

O 'Pubsub.publish' roda depois de "ComponentWillMount" ser chamado, certo?

Certo, ele será chamado quando a função like ou comenta fore chamadas.

Seria a declaração de subscribe no "ComponetWillMount" uma estratégia?

Não entendi.

Tipo, desde o começo do código do componente, já se inscreve pra quando em algum lugar, rodar o publish no canal 'novos-comentarios', por exemplo, e o código no subscribe de 'novos-comentarios', (no "ComponentWillMount") roda? Independente se o "ComponentWillMount" já tiver sido chamado?

Não, se o componentWillMount não for chamada seu componente não irá se inscrever para receber eventos para o tópico novos-comentarios.

No meu blog tenhos alguns posts sobre ventos, talvez possa lhe ajudar:

Espero ter ajudado.

O método "componentWillMount" não é chamado de novo, quando as funções de callback dos Pubsub.subscribe declaradas nele, são chamadas, certo?

Ele só roda uma vez, antes de renderizar o componente. Declarando as funções dos Pubsub.subscribe. Certo?

Fala Marcelo:

O método "componentWillMount" não é chamado de novo, quando as funções de callback dos Pubsub.subscribe declaradas nele, são chamadas, certo?

Certo

Ele só roda uma vez, antes de renderizar o componente. Declarando as funções dos Pubsub.subscribe. Certo?

Certo

Espero ter ajudado.