Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre renderização e uso do lifecycle do VueJS

Estou com um problema na utilização do VueJs (provavelmente relacionado ao Lifecycle do Vue). Estou criando um componente chamado Chart que consiste apenas de uma div com atributo "ref" e que possui algumas "props" relacionadas a dados e outras de customização. Nesse componente eu chamo uma função de um serviço(.js) dentro de "mounted" passando props+ref e que é responsável por criar e retornar uma instância de um gráfico utilizando uma lib chamada 'AmCharts' (https://www.amcharts.com/docs/v4/). Na página onde quero utilizar meu componente Chart eu faço a requisição http dentro do "created()" e seto os dados em uma variável declarada dentro de "data()". Essa variável é passada para o componente Chart por meio de uma diretiva (:data). A ideia é que ao entrar na página o componente chart seja automaticamente renderizado com os dados vindos da requisição, porém, na primeira vez que a página renderiza o serviço do Chart está sendo chamado antes mesmo do dado da requisição ser passado gerando erro de "undefined" na hora de tentar acessar o dado no serviço. Através do lifecycle existe alguma forma de só permitir a renderização caso haja dado sendo passado ao componente ou preciso fazer uma validação manual mesmo? No momento estou fazendo uma verificação via "v-if" na chamada do chart para verificar se o dado já foi setado ou não. Porém, não sei se essa é a forma mais indicada.

3 respostas
solução!

Fala ai Caroline, tudo bem? Vamos lá:

Através do lifecycle existe alguma forma de só permitir a renderização caso haja dado sendo passado ao componente ou preciso fazer uma validação manual mesmo?

Nesse caso eu recomendo você utilizar um v-if, existem técnicas mais complexas que estão por vindo/chegando, mas, uma verificação manual.

No momento estou fazendo uma verificação via "v-if" na chamada do chart para verificar se o dado já foi setado ou não. Porém, não sei se essa é a forma mais indicada.

Sim, eu recomendaria justamente esse forma (atualmente), em breve podemos fazer coisas mais complexas e talvez substituir esse v-if.

Obs: Tente realizar a requisição no mounted, deixa o created apenas para inicialização do componente.

Espero ter ajudado.

Muito obrigada pelo feedback, Matheus!

Nesse caso eu recomendo você utilizar um v-if, existem técnicas mais complexas que estão por vindo/chegando, mas, uma verificação manual.

Beleza vou continuar prosseguindo dessa forma então.

Obs: Tente realizar a requisição no mounted, deixa o created apenas para inicialização do componente.

Tranquilo. Farei como sugerido.

Me ajudou bastante. Muito obrigada!

Magina Caroline, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.