Como Adicionar Efeito Shimmer no React Native

Para desenvolvedores React Native que buscam aprimorar a experiência do usuário, adicionar um shimmer effect durante o carregamento de dados pode ser uma excelente solução. Também conhecido como “skeleton loader”, esse efeito visual simula o carregamento do conteúdo, mantendo o usuário engajado e informando que a aplicação está ativa. Neste artigo, vamos explorar como implementar esse recurso utilizando a biblioteca react-native-skeleton-placeholder, transformando a percepção de desempenho da sua aplicação.

Por que usar um Shimmer Effect?

O shimmer effect, também conhecido como skeleton loader, é uma técnica que melhora a experiência do usuário ao exibir um espaço reservado enquanto o conteúdo real está sendo carregado. Ele proporciona uma transição suave entre o carregamento e a exibição dos dados, transmitindo uma sensação de maior responsividade no aplicativo.

Ao invés de mostrar uma tela em branco ou um indicador de carregamento genérico, o shimmer effect replica a estrutura da interface, preenchendo-a com formas animadas que simulam o conteúdo que está por vir. Isso ajuda a reduzir a percepção de espera e mantém o usuário engajado, já que ele tem uma ideia do que esperar quando os dados forem carregados.

Além de melhorar a percepção de velocidade, o shimmer effect também contribui para a estética do aplicativo, tornando-o mais moderno e sofisticado. A animação sutil e elegante do skeleton loader pode transmitir uma sensação de cuidado e atenção aos detalhes, o que pode aumentar a satisfação do usuário.

Implementar um shimmer effect é uma maneira eficaz de otimizar a experiência do usuário, oferecendo um feedback visual atraente durante o carregamento de dados e mantendo o engajamento do usuário. Para saber mais sobre como otimizar a experiência do usuário, você pode conferir este artigo sobre SamMobile lança novo design de site com foco na experiência do usuário.

Integrando react-native-skeleton-placeholder

Para criar o shimmer effect, utilizaremos o pacote react-native-skeleton-placeholder. A instalação é simples e rápida, permitindo que você adicione esse efeito visual ao seu aplicativo em poucos passos.

Para instalar o pacote, execute o seguinte comando no seu terminal:

npm install react-native-skeleton-placeholder

Após a instalação, você poderá importar o componente SkeletonPlaceholder e utilizá-lo para criar o efeito de carregamento simulado em sua interface.

Este pacote oferece uma variedade de opções de customização, permitindo que você ajuste a aparência do skeleton loader para corresponder ao design do seu aplicativo. Você pode alterar as cores, formas e tamanhos dos elementos, criando um efeito visual que se integra perfeitamente à sua interface.

Com o react-native-skeleton-placeholder, adicionar um shimmer effect ao seu aplicativo React Native se torna uma tarefa simples e eficiente, permitindo que você melhore a experiência do usuário e crie uma interface mais atraente e responsiva.

Implementando o Skeleton Loader

Abaixo, apresentamos a função que renderiza o skeleton loader enquanto os dados estão sendo buscados. Este componente utiliza o SkeletonPlaceholder para criar um efeito visual que simula o carregamento do conteúdo.

import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
import { View, StyleSheet } from 'react-native';

const renderSkeletonView = () => {
  return (
    <View style={styles.skeletonContainer}>
      {[1, 2, 3, 4, 5, 6].map((_, index) => (
        <SkeletonPlaceholder key={index} backgroundColor="#333">
          <SkeletonPlaceholder.Item
            flexDirection="column"
            alignItems="center"
            style={{ marginBottom: 20 }}>
            <SkeletonPlaceholder.Item
              width={160}
              height={240}
              borderRadius={8}
            />
            <SkeletonPlaceholder.Item
              width={120}
              height={20}
              marginTop={15}
            />
            <SkeletonPlaceholder.Item
              width={90}
              height={15}
              marginTop={10}
            />
          </SkeletonPlaceholder.Item>
        </SkeletonPlaceholder>
      ))}
    </View>
  );
};

const styles = StyleSheet.create({
  skeletonContainer: {
    flexDirection: 'row',
    flexWrap: 'wrap',
    justifyContent: 'space-between',
    paddingHorizontal: 10,
  },
});

Neste código, o componente renderSkeletonView renderiza uma série de espaços reservados com formas e tamanhos variados. Esses espaços são preenchidos com uma cor de fundo escura e exibem uma animação de shimmer, criando a ilusão de que os dados estão sendo carregados.

O componente utiliza um loop para renderizar vários itens de skeleton, cada um com um formato diferente. Isso ajuda a simular a estrutura da interface real e proporciona uma experiência de carregamento mais realista.

Os estilos definidos no objeto styles controlam o layout e o espaçamento dos elementos do skeleton loader, garantindo que ele se encaixe perfeitamente na sua interface.

Para complementar a experiência, você pode considerar usar a Xiaomi HyperOS Global terá nova tela de chamadas, que oferece uma interface mais moderna e intuitiva.

Integrando o Skeleton Loader em FlatList

Agora, vamos integrar o skeleton loader ao nosso componente principal. Quando isLoaderActive for verdadeiro, o shimmer effect será exibido. Caso contrário, a lista de dados será mostrada.

import Animated from 'react-native-reanimated';

const [isLoaderActive, setIsLoaderActive] = useState(false);

  const onRefresh = useCallback(done => {
    setIsLoaderActive(true);
    setTimeout(() => {
      setIsLoaderActive(false);
      isReadyToRefresh.value = false;
      done();
    }, 3000);
  }, []);

{isLoaderActive ? (
  renderSkeletonView()
) : (
  <Animated.FlatList
    data={data}
    scrollEventThrottle={16}
    bounces={false}
    renderItem={renderItem}
    key={2}
    numColumns={2}
    keyExtractor={(_, index) => index.toString()}
    ItemSeparatorComponent={() => <View style={{ height: 20 }} />}
  />
)}

Neste trecho de código, utilizamos o estado isLoaderActive para controlar a exibição do skeleton loader. Quando o usuário aciona a função onRefresh, o estado isLoaderActive é definido como verdadeiro, o que faz com que o componente renderSkeletonView seja renderizado em vez da lista de dados.

Após um período de tempo simulado (3 segundos neste exemplo), o estado isLoaderActive é definido como falso, o que faz com que a lista de dados seja exibida novamente. Essa transição suave entre o skeleton loader e a lista de dados proporciona uma experiência de carregamento mais agradável para o usuário.

O componente Animated.FlatList é utilizado para renderizar a lista de dados de forma eficiente, permitindo que você exiba grandes quantidades de informações sem comprometer o desempenho do aplicativo. Este componente oferece uma variedade de opções de customização, permitindo que você ajuste a aparência e o comportamento da lista para corresponder ao design do seu aplicativo.

Para quem busca melhorar a experiência de uso em dispositivos móveis, saber Como usar o App Freeze no Android 15 para liberar espaço pode ser uma boa alternativa.

Adicionar um shimmer effect pode melhorar significativamente a experiência do usuário, tornando a interface mais interativa e agradável. Essa implementação simples, porém eficaz, aprimora a percepção de desempenho e mantém os usuários engajados durante o carregamento de dados. Sinta-se à vontade para experimentar diferentes estruturas de skeleton que se alinhem ao design da interface do seu aplicativo.

Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano.

Via Dev.to

Leave a Comment