Aula 11
Componentes Conforme os Resultados da API de Busca, componentWillReceiveProps
Summary
Resumo da Transcrição
Mudança nas Propriedades da Imagem
- Foi solicitado que se mudem as propriedades que definem a imagem e o texto de um componente para usar informações obtidas a partir da API da Microsoft.
- O novo objeto a ser usado inclui uma descrição da imagem e uma URL de thumbnail.
Implementação da Estrutura
- As propriedades foram mudadas para utilizar
item.thumbnail
em vez deitem.RL
e uma nova propriedade foi estabelecida para descrição. - Cada item será renderizado através de um componente
imageless item
, utilizando um loop sobre a fonte de dados.
Problemas de Renderização
- Inicialmente, os itens estão vazios (
empty array
), e a API não retorna resultados de imediato, o que causa a não renderização de qualquer informação até que os dados sejam recebidos. - A solução envolve a implementação do ciclo de vida do componente para atualizar a renderização quando as propriedades mudam.
Atualização com Novos Dados
- Implementação do método
componentWillReceiveProps
para detectar mudanças nas propriedades. - Verificação se os itens recebidos são diferentes dos itens anteriormente armazenados. Se forem diferentes, o estado é atualizado:
- O
data source
é atualizado utilizandocloneWithRows
com os novos itens recebidos.
- O
Resumo Final
- O pedido inicial para a API pode demorar, e o componente deve lidar corretamente com a ausência inicial de dados.
- O método
setState
é utilizado para atualizar o estado e garantir que a lista seja renderizada quando novas informações estiverem disponíveis.
Próximos Passos
- Nos vídeos seguintes, será implementada a funcionalidade de cliques para navegar a uma nova cena, onde a imagem será exibida em um tamanho maior.
Video Transcript
Então, agora a gente vai mudar esses propriedades,
o valor dessas propriedades da imagem do texto para ser esses aqui.
Porque o item, o objeto item mudou as propriedades,
porque agora a gente está olhando nas propriedades
que de cada item que foi servido pela API da Microsoft,
e se você olhar o objeto de cada item,
tem esse nome aqui,
nem a gente vai usar para ser descrição da imagem,
e também tem esse thumbnail URL que vai ser a imagem,
a própria imagem,
se você copiar e colar aqui, vai ser essa imagem do cachorro.
É só nota que é a gata de TPS.
Agora,
vamos mudar em vez de item.RL,
item.thumbnail.
E no texto vai ser o neio para descrição.
Então, vai dar conta desse componente.
Só se lembre que a gente está destruturando o item que está dentro do props,
na verdade, o argumento aqui é props,
mas dentro do props tem o item,
então a gente extrai o item assim.
E vamos voltar ao componente aqui.
No componente imageless, a gente dá um render row,
cada item é renderizado como um componente imageless item,
e a gente passa com a propriedade o item aqui.
O item aqui, ele vai dar um loop para cada item dentro do data source,
e vai fazer esse componente.
Note agora que aqui é item.id,
mas a gente não tem mais id.
Se você notar aqui, não temos mais id, mas temos image id.
Então, vamos usar esse aqui para identificar o nosso item.
É só isso por isso.
Mas se você salvar,
assim, vou colocar aqui o soft wrap para você ver tudo.
Se você salvar, você vai ver que ainda não funciona, né?
Não aparece nada.
O problema aqui é se você voltar para o index,
então a gente tem um imageless aqui,
a gente dá como propriedade os itens,
que estão armazenados no estado,
como propriedade item.
Mas o problema é que, inicialmente, os itens
são um array que está empty, né?
Então, inicialmente, não vai ter nada.
E só quando dá o component.goMount,
quando esse componente está prestes a montar,
vai fazer um pedido aqui para API.
Mas como todo pedido demora um pouquinho para processar,
manda para o servidor, pega a resposta,
vai demorar um pouco.
Então, até lá, o componente já vai estar renderizado.
E por isso não mostra nada.
O que a gente deve fazer, então?
Então, a gente tem que ir no component.imgless
e mudar umas coisas aqui.
Porque ele vai renderizar isso,
mas só está inicializando os dados
quando o componente é construído via construtor.
O que a gente vai fazer é quando essa propriedade
que é dada a imagelessItems for mudada,
que vai acontecer quando dá o setState aqui, né?
Inicialmente, esse cara vai ser vazio, né?
E quando dá o setState,
vai popular esse array com manyThings, os objetos, né?
Então, tem uma maneira de fazer o componente renderizar de novo
quando receber novas propriedades.
Vamos voltar ao imageList e vamos criar
essa função component.
We'llReceiveProps.
Ah, bom.
Essa função é chamada toda vez que esse componente,
que é o imageList,
receber novas propriedades.
O argumento aqui vai ser o nextProps,
que vão ser as novas propriedades
que serão dadas ao componente.
O que a gente vai fazer?
Primeiro, a gente vai checar
se
os itens
anteriores,
the props anteriores
não forem os mesmos.
Se não forem os mesmos,
a gente vai atualizar
a lista, vai renderizar.
Fazer isso, vamos dar um comparação aqui.
Se forem os mesmos itens,
eu recebo novas props,
mas os itens são os mesmos,
eu não preciso renderizar de novo,
então eu não me importo.
Vamos fazer se
vamos fazer assim.
Se os itens
do nextProps
não forem iguais ao
propriedades.
A gente vai mudar
porque isso foi igual, não me importo.
O que a gente vai fazer?
Tem um problema aqui nesse cara aqui.
Inicialmente a gente
tinha assim
que está criando esse objeto
ListViewDataSource.
Depois a gente settle state
com o clone with rows.
Mas o que a gente vai fazer agora
é fazer isso aqui.
Em vez de só uma vez no construtor
a gente vai fazer
cada vez que recebe novas propriedades
recebe novos itens.
A gente vai atualizar o state
e setar o data source com novos itens.
Então vou remover isso aqui.
O que eu vou fazer
é eu vou deixar o
data source aqui
e a gente vai mover isso aqui pra cá
cada vez que tem novos itens
e vamos clone our throws
pra atualizar o data source.
Mas pra fazer isso
deixa eu só mudar o nome aqui
pra ficar
se eu mudar pra esse fica assim.
E como é
i s6
s6
não precisa fazer isso se tem o mesmo
propriedade, tem
o mesmo nome que eu falou
eu posso
tirar isso.
Então aqui o que eu vou fazer?
Vou fazer
setar o state
e vou mudar o data source
pra o que?
vai ser
o state, data source
com o clonor rows
do que?
do next prop
com o items.
Ok
Ok, deixa eu se notar aqui, funciona o
ah?
Demora um pouco mas funciona o
só avisar isso ok?
Então essa função
que é chamada component
component will receive props
é chamada toda vez que
esse componente
recebe novas propriedades
e essas novas propriedades
são armazenadas nesse argumento
da função chamada next props.
Primeiro a gente checa
se os itens das próximas
propriedades
não forem iguais
porque se for igual a gente
não precisa se preocupar
mas se for diferente a gente
precisa atualizar a lista
né?
Então o que a gente faz?
A gente seto state pra o data source
pra ser o data source antigo
exceto que a gente
vai com clonor rows
os novos itens
então vai mudar
primeiro inicialmente vai estar
sem nada né?
A gente lembra que vai estar
sem nada
vazio
e quando a gente fazer o pedido
pra api aqui
vai ser
setar o state
do itens que são dados a propriedades
esse cara vai mudar
né?
Ops
Tira esse
e vai
atualizar o data source
destaque
atualize aqui
demora um pouquinho
então quando o programa inicializa
faz aquele pedido
de HTTP
pro back end da Microsoft
demora um pouquinho
e quando o pedido for aceito
e a resposta dada pra gente
a gente seto state
que muda
esses itens
mas os itens são a propriedade
da image list
que como foro dado na propriedade
da next props
e seto state do data source com os novos itens
e aqui tá funcionando
tá bom?
nos passos vídeos a gente
vai implementar
o clique
pra clicar aqui e pra outra
cena
e
mostrar a imagem
tão maior
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: