1. Diagnóstico de Problemas de Instalação e Dependências
A instalação do React Native Deck Swiper pode apresentar conflitos de dependências. Verifique primeiro os requisiots do ambiente:
- Versão do React Native ≥ 0.49.1
- Versão do React ≥ 16.0.0-beta.5
- react-native-view-overflow instalado
Se ocorrerem erros, examine as peerDependencies no package.json. Reinstale com:
npm install react-native-deck-swiper --save
# ou
yarn add react-native-deck-swiper
2. Resolução de Deslizamento Irresponsivo ou Truncado
Quando o deslizamento dos cartões não é fluido, verifique as configurações de gestos. Assegure que as propriedades estejam definidas corretamente:
<Swiper
swipeHabilitado={true}
swipeVertical={true}
limiteHorizontal={larguraTela / 4}
limiteVertical={alturaTela / 5}
// outras configurações...
/>
Passos para diagnóstico:
- Confirme a configuração do PanResponder
- Valide os limites de gestos
- Verifique os estilos do contêiner dos cartões
- Identifique conflitos com outros gestos
3. Ajuste de Efeitos de Empilhamento Anormais
O empilhamento é uma característica central. Se o efeito estiver incorreto, ajuste estes parâmetros chave:
quantidadePilha: controla quantos cartões são exibidosespacamentoPilha: espaço entre cartõesescalaPilha: fator de escala dos cartõesexibirSegundoCartao: visibilidade do segundo cartão
No arquivo principal do componente, o método de animação de empilhamento pode conter a origem do problema.
4. Tratamento de Renderização Personalizada de Cartões
A renderização customizada é uma funcionalidade avançada. Para resolver problemas de renderização:
Uso correto da propriedade de renderização:
renderizarCartao={(cartao, indice) => (
<View estilo={estilos.cartaoCustomizado}>
<Text>{cartao.titulo}</Text>
<Image fonte={{uri: cartao.imagem}} />
</View>
)}
Erros comuns:
- Omissão do parâmetro do cartão
- Estilos do cartão sem flex: 1
- Tratamento incorreto do índice do cartão
5. Adaptação de Layout Responsivo
Para garantir exibição correta em diferentes dispositivos:
- Uso da API Dimensions: o componente lida automaticamente com tamanhos de tela
- Ajuste de margens: através de
margemHorizontalCartaoemargemVerticalCartao - Tratamento de rotação: o componente inclui tratamento interno para mudanças de dimensão
6. Restrições de Direção de Deslizamento e Callbacks
O componente suporta deslizamento em quatro direções, cada uma controlável individualmente:
<Swiper
desabilitarDeslizeEsquerda={false}
desabilitarDeslizeDireita={false}
desabilitarDeslizeCima={true}
desabilitarDeslizeBaixo={true}
aoDeslizarEsquerda={(indiceCartao) => registrar('Deslizou para esquerda')}
aoDeslizarDireita={(indiceCartao) => registrar('Deslizou para direita')}
/>
7. Personalização de Estilos de Sobreposição
Os rótulos de sobreposição são essenciais para a experiência. Se não forem exibidos corretamente:
Verifique a configuração dos rótulos:
rotulosSobreposicao={{
esquerda: {
titulo: 'RECUSAR',
estilo: {
rotulo: {
backgroundColor: 'vermelho',
cor: 'branco',
tamanhoFonte: 24
}
}
},
direita: {
titulo: 'CURTIR',
estilo: {
rotulo: {
backgroundColor: 'verde',
cor: 'branco',
tamanhoFonte: 24
}
}
}
}}
8. Técnicas de Otimização de Desempenho
O componente tem bom desempenho, mas com muitos cartões, considere:
- Uso de keyExtractor: forneça identificadores únicos para cada cartão
- Ajuste da quantdiade de empilhamento: evite renderizar muitos cartões simultaneamente
- Otimização do componente do cartão: utilize PureComponent ou React.memo
- Controle da complexidade das animações: simplifique estilos e animações
9. Erros Comuns e Soluções
| Tipo de Erro | Possível Causa | Solução |
|---|---|---|
| Cartão não desliza | Configuração incorreta do PanResponder | Verifique as definições de resposta a gestos |
| Efeito de empilhamento anormal | Configuração inadequada da quantidade de empilhamento | Ajuste os parâmetros de empilhamento |
| Rótulos não exibidos | Erro na configuração dos rótulos de sobreposição | Valide o formato da configuração |
| Vazamento de memória | Limpeza insuficiente de listeners no desmonte | Implemente corretamente o método de desmonte do ciclo de vida |
10. Funcionalidades Avançadas e Melhores Práticas
Modo de repetição infinita:
<Swiper
repetirInfinitamente={true}
cartoes={dados}
// outras configurações...
/>
Funcionalidade de retorno por deslize:
<Swiper
retornarCartaoPorDeslize={true}
// outras configurações...
>
<Button aoPressionar={() => esteComponenteSwiper.retornarCartao()} titulo="Voltar" />
</Swiper>
Parâmetros de animação personalizados:
duracaoAnimacaoDeslize: duração da animação de deslizefriccaoResetCartaoSuperior: fricção de reset do cartão superiortensaoAnimacaoEmpilhamento: tensão da animação de empilhamento