React Salvador Meetup #14
@pedrorosarioo
Quem somos nós?
Dia de conscientização sobre o autismo
Sanar: trazer conhecimento na área de saúde por um preço acessível
Núcleo em que trabalho: Residência Médica
Objetivo: ajudar o aluno de Medicina a ser aprovado na prova de residência (se tornar um especialista)
Já impactamos mais de 50 mil médicos em todo o Brasil
Existem cursos preparatórios na concorrência que chegam a valores de R$ 16 mil reais (cursos bi-anuais).
Extensivo Sanar: R$ 1800.00 (curso com duração de 1 ano)
Intensivo Sanar: R$ 1000.00 (curso com duração de 6 meses)
Somos uma empresa que incentiva a diversidade e a autonomia
Nossos produtos
Plataforma de cursos online
App de questões
E muitas dashboards para controle...
Alguns dados do nosso o app
48 mil usuários registrados
102 mil questões para o usuário responder
18 mil comentários em questões
Mais de 5 milhões de respostas registradas
E tudo isso de forma 100% gratuita
Tecnologias que utilizamos
React
React-Native
Styled components
Redux
Redux-Saga
Typescript
Graphql (Apollo)
NodeJS
Jest
MongoDB
Interessa?
jobs.kenoby.com/sanar
Por que usar animações?
Por que usar animações?
"Animations are important in order to create an optimal user experience, especially in the mobile world. App users have been exposed to a lot of them already, and have become familiar with their usability and beauty. And since they have hands-on experience with them, they expect them as a given in every single app they download."
Marousas, 2018. [3]
Por que usar animações:
Dica
Por que usar animações:
Erros "elegantes"
Por que usar animações:
Indicador de ação
(ou simples distração)
Por que usar animações:
Shared Element Transitions
Por que usar animações:
Chamar a atenção
Por que usar animações:
Feature
Animações x React Native
X
Animações x React Native
SOLUÇÕES:
Animated
Animated.Value
Animated.Value
Vejamos como funciona no codigo!
Configurando animações
Animated.timing(value, config)
Parâmetros:
Descrição:
Manipula um valor em função do tempo, baseando-se em uma curva facilitadora.
Animated.timing
Animated.spring(value, config)
Parâmetros:
Descrição:
Manipula um valor com base em um modelo fisico de mola simples, ou de um oscilador harmônico.
Animated.spring
Animated.decay(value, config)
Parâmetros:
Descrição:
Começa com uma velocidade inicial e gradualmente diminui (com base em um coeficiente) até parar.
Animated.decay
Compondo Animações
Conjunto de funções que coordenam/encadeiam animações
Valores combinados
Conjunto de funções que realizam operações aritméticas sobre valores animados
Value.interpolate(config)
Função que, dado um range de entrada (inputRange) e um vetor de saída (outputRange), retorna uma interpolação linear dos dois.
Usado quando se deseja sincronizar valores que crescem de formas muito diferentes (Ex: opacity e translateY).
Value.interpolation(config)
É possivel inserir utilizar multiplas segmentações nos vetores
Value.interpolation(config)
Suporta o uso de strings e valores em outras unidades, permitindo fazer interpolação entre inteiros e cores, ou graus (deg)
Value.interpolation(config)
Parâmetros:
Animated.event([mapping], config)
Animated.event([mapping], config)
Parâmetros:
Animated.event([mapping], config)
Parâmetros de config:
useNativeDriver
useNativeDriver
Vejamos como funciona...
useNativeDriver: false
useNativeDriver: false
useNativeDriver: true
O que o useNativeDriver faz é deixar que o nativo realize a maior parte dos passos. Ao invés de passar as atualizações dos componentes pela bridge a cada frame da animação, o que se faz é passar um objeto serializado contendo todas as informações da animação, chamado nativeAnimatedModule. Desta forma, o lado nativo pode cuidar da animação diretamente na UI thread a cada frame.
useNativeDriver: true
1. Cria-se um node com as informações do valor que será animado
2. Cria-se um node de interpolação que dirá ao driver nativo como interpolar o valor
useNativeDriver: true
3. Cria um node de propriedade, informando ao driver nativo qual propriedade será atualizada na View
4. Conecta todos os nodes criados
5. Conecta as props com a view
useNativeDriver: true
5. Uma vez passados os passos anteriores, a etapa final da montagem do NativeAnimatedModule consiste em passar as informações de inicio da animação (qual curva será usada, qual valor será atualizado, quais serão os frames)
useNativeDriver: true
Nativo:
DUVIDAS?
OBRIGADO PELA PRESENÇA!!
[1] Duplessis, J. Using Native Driver for Animated. Disponível em: https://facebook.github.io/react-native/blog/2017/02/14/using-native-driver-for-animated, visitado em: jun, 2019.
[2] Facebook React Native docs. Animated. Disponível em: http://facebook.github.io/react-native/docs/animated.html, visitado em: jun, 2019.
[3] Marousas, T. Animations in React Native: how to achieve great performance. Disponível em: https://medium.com/building-with-react-native/animations-in-react-native-how-to-achieve-great-performance-and-tips-1x04-44fd43996428, visitado em: mai, 2019.