Em uma era governada pelo valor estético do seu produto, as imagens são cruciais para comunicar a distinção e exclusividade do seu produto. As imagens ajudam a comunicar as ideias, soluções e identidades dos produtos que construímos.

Como desenvolvedores, devemos ter as melhores ferramentas para alcançar essas qualidades-e é isso que o componente React Native Image nos capacita a fazer. Neste artigo, vamos mergulhar nos fundamentos do componente React Native Image , discutir os tipos e acessórios disponíveis e cobrir suas limitações e alternativas.

Tipos de imagem

Antes de mergulharmos nos detalhes do componente de imagem, vamos revisar os vários tipos de imagens que temos para aplicativos móveis e, especificamente, os tipos de imagem que o componente React Native Image espera.

  • Imagens locais: imagens disponíveis no dispositivo do usuário que são usadas temporariamente ou encontradas no rolo da câmera
  • Imagens de rede: imagens fornecidas pela web, como imagens encontradas e carregadas do Google
  • Recursos estáticos: recursos disponíveis no dispositivo que são sempre os mesmos-não são carregados dinamicamente, nem mudam

Propriedades

O componente React Native Image fornece algumas propriedades que você pode usar para configurar o componente e exibir as imagens de acordo com as necessidades técnicas ou comerciais de sua equipe. Existem alguns deles, mas vamos nos concentrar nos básicos por enquanto.

source

Esta é a propriedade principal que informa ao componente sobre a imagem que você deseja carregar. Você pode usar um arquivo local ou remoto aqui e, basicamente, apenas passar o URI da imagem para carregá-la. Se você precisar especificar as dimensões de largura e altura da imagem, também pode passar vários URIs por ela e deixar para o dispositivo selecionar o melhor para uso.

source também aceita uma propriedade de cache que informa ao componente como armazenar imagens de rede em cache, mas isso só funciona para iOS.

defaultSource

Esta propriedade é útil quando seu componente espera carregar uma imagem de rede. Uma imagem padrão pode ser especificada, que será carregada até que a imagem de rede esteja disponível.

resizeMode

Este adereço controla como as imagens são ajustadas quando suas dimensões não se ajustam ao tamanho do quadro. Os valores disponíveis são:

  • cover : dimensiona a largura e a altura da imagem para ser igual ou maior que o tamanho da visualização
  • contain : o oposto da propriedade da capa, contain dimensiona a largura e a altura da imagem para ser igual ou menor que o tamanho da visualização
  • stretch : dimensiona a largura e a altura independentemente uma da outra
  • repetir : repete a imagem para cobrir a visão até que seja preenchida
  • center : centraliza a imagem na visualização ao longo de ambas as dimensões
  • style : usado para estilizar o componente da imagem

Se estiver interessado, você pode navegar por outros adereços no Reaja a documentação nativa.

Imagens de fundo no React Native

CSS é normalmente a linguagem usada para adicionar imagens de fundo, mas o React Native fornece um componente ImageBackground que disponibiliza funcionalidade semelhante em aplicativos da web. O componente ImageBackground também aceita os mesmos adereços que o componente Image aceita.

Usando o componente React Native Image

Agora que superamos a teoria, vamos sujar as mãos com uma demonstração. Para começar, você deve usar esta configuração de ambiente React Native . Para este tutorial, estou seguindo as instruções de instalação e configuração da Expo.

Se desejar acompanhar, você pode clonar este repositório e check-out para a ramificação startup . O código final está na ramificação principal .

Primeiro, vamos adicionar uma imagem de plano de fundo ao aplicativo. Para esta demonstração, adicionei uma imagem chamada “static-image” no diretório src/assets . Vamos usá-lo para demonstrar como o React Native carrega imagens estáticas.

Abra App.js e adicione o seguinte código:

 importar {StatusBar} de"expo-status-bar";
importar React de"react";
import {StyleSheet, Text, View, ImageBackground} de"react-native"; const staticImage=require ("./src/assets/static-image.png");
função padrão de exportação App () { Retorna (    {/* TODO: algo vai aqui */}   );
} estilos const=StyleSheet.create ({ container: { flex: 1, backgroundColor:"#fff", alignItems:"center", justifyContent:"center", }, ImageBackground: { flex: 1, resizeMode:"cover", largura:"100%", alignItems:"center", }, });

Como você pode ver, importamos o ImageComponent e, em seguida, armazenamos a localização da imagem estática em uma variável chamada staticImage<✓. The CommonJS A sintaxe é usada para informar ao servidor metro quando carregar a imagem no pacote do aplicativo. As instruções require dizem ao servidor metro para incluir a imagem no pacote.

Em seguida, envolvemos todos os componentes filhos no componente ImageBackground e especificamos o estilo. Para garantir que nosso estilo seja traduzido, a imagem deve cobrir toda a visualização-especificada onde escrevemos"100 por cento de largura"-e todos os filhos devem ser justificados e alinhados ao centro.

A seguir, importe a matriz imagem contida no arquivo imagens em src . Importe também os componentes ScrollView , Image e ActivityIndicator do React Native.

Adicione esta instrução à sua função App.js antes da instrução return , assim:

 const [carregando, setLoading]=React.useState (falso);

Isso é usado para armazenar o estado de carregamento de cada imagem. Usaremos isso mais tarde para exibir um componente de carregamento.

Em seguida, substitua a seção de tarefas por este código:

  {IMAGES.map ((imagem, i)=> { Retorna (   setLoading (true)} onLoadEnd={()=> setLoading (false)} /> {carregando && }  ); })} 

O array image contém um grande número de imagens que excedem a janela de visualização atual da tela, então usaremos o componente ScrollView em vez de um Exibir para garantir que os usuários possam rolar para outras seções do aplicativo em sua janela de visualização. O estilo diz ao componente ScrollView para envolver todas as imagens de forma que elas sejam empilhadas bem abaixo umas das outras e exibir as imagens em uma linha em vez da coluna padrão.

O array image é executado em loop e eu passo a imagem contida no array para a chave uri disponível na propriedade source . Eu também aplico larguras e alturas diferentes, dependendo se o índice da imagem é ímpar ou par. O conjunto resizeMode diz ao componente da imagem para centralizar as imagens ao longo de ambas as dimensões na visualização.

Por último, aplico estilos e obtenho o estado de carregamento da imagem usando os adereços onLoadStart e onLoadEnd do componente da imagem.

Finalmente, eu uso o estado de carregamento da imagem para renderizar um componente ActivityIndicator que será exibido quando a imagem estiver carregando.

Adicione esses estilos ao objeto style :

 ImageContainer: { marginHorizontal: 16, marginTop: 30, largura:"100%", }, Imagem: { shadowColor:"preto", shadowOffset: { largura:-10, altura: 9, }, shadowOpacity: 0,5, shadowRadius: 2, elevação: 5 },

Em seguida, aplique os estilos elevação e sombra para dar às imagens uma aparência de sombra projetada. O estilo de elevação será usado no Android, enquanto as propriedades de sombra serão usadas no iOS. Aqui está uma olhada em nosso produto final:

Resultado final de nossa demonstração do componente React Native Image

Limitações

Embora o componente React Native Image venha equipado com alguns recursos incríveis, ainda existem algumas limitações que você pode encontrar ao trabalhar com ele.

Carregamento progressivo da imagem

A partir da publicação deste artigo, React Native Image não oferece suporte ao recurso de carregamento progressivo de imagens. Para conseguir isso, você precisa de um pacote de imagem externa ou crie um você mesmo .

Formatos de imagem

O componente Image suporta apenas os seguintes formatos de imagem:

  • PNG
  • JPG/JPEG
  • BMP
  • GIF
  • WEBP
  • PSD (apenas iOS)

Se o seu projeto precisa crescer além desses formatos suportados, este não será o componente certo para você.

Conclusão

Aprendemos sobre os incríveis recursos do componente React Native Image , principalmente como ele nos permite comunicar-nos visualmente com nossos usuários. Há tantas coisas que podemos alcançar com este componente-você pode até construir outro componente de imagem avançado para resolver algumas das limitações que discutimos! Então, jovens padawans, deixo vocês armados com tudo de que precisam para moldar a galáxia.

Se você tiver dúvidas, tiver dúvidas ou correções, ou apenas gostaria de entrar em contato, não hesite em me contactar no Twitter. Que a força esteja com você!

Leituras adicionais

A postagem Exibindo imagens com a imagem nativa React componente apareceu primeiro no LogRocket Blog .