Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Treinamento React Native

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Treinamento React Native

More Decks by Fabrício Ferrari de Campos

Other Decks in Technology

Transcript

  1. Conceitos • JavaScript hoje • React • React Native •

    Fluxo Git recomendado • Estrutura do projeto • Separação de conceitos e isomorfismo • Navegação • Tópicos avançados Agenda Prática • Setup do ambiente • Refatoração: separando os conceitos • Testes automatizados
  2. Após os 10 dias • jQuery (2006) • Node.js (2009)

    • React (2013) • Electron (2013) • React Native (2015) JavaScript Hoje
  3. Como começar hoje • Usar ES6 aka (ECMAScript 2015) ◦

    ES6 é o padrão em React/React Native ◦ Ótimas adições ▪ const const API_URL = process.env.REACT_APP_API_URL; ▪ arrow function const sum = ( a, b ) => a+b; ▪ default parameter const fooFunction = (foo = 'foo') => { } ▪ destructuring const { attr1, attr2 } = this.props; ▪ spread operator <Component {...props} /> ▪ class syntax class MyComponent { constructur() {} myfunction() {} } • Editores a escolha: Atom, Sublime 3, VS Code, etc JavaScript Hoje
  4. Como começar hoje • Usar Babel ◦ Na Web ▪

    Se precisar dar suporte ao IE11, usar Babel ◦ No back-end ▪ Com Node a partir do 8, não há necessidade do Babel ◦ No Mobile ▪ React Native já vem com Babel JavaScript Hoje
  5. O caminho para JavaScript 1. You Don't Know JS: ES6

    & Beyond 2. CS50's Mobile App Development with React Native JavaScript Hoje
  6. O que é? • O V do MVC • Utiliza

    o conceito de virtual DOM • Atualização do DOM de forma reativa • Força o desenvolvimento orientado a componentes • HTML JSX e JavaScript juntos React
  7. Conceitos principais • JSX ◦ https://jsfiddle.net/FabricioFFC/a017wger/ • Stateless component ◦

    https://jsfiddle.net/FabricioFFC/zkdjasxm/ • Statefull component ◦ https://jsfiddle.net/FabricioFFC/pyzt7uw1/ React
  8. Conceitos principais • Props ◦ Atributos e dependências recebidos de

    fora ◦ Quando mudados causam o re-render do componente ◦ PropTypes • State ◦ Representação a nível de componente do estado dele ◦ Pode ser alterado apenas via this.setState, que roda de forma assíncrona ◦ Mudanças no state, causam o re-render React
  9. Conceitos principais: Lifecycle • Mounting ◦ constructor ◦ getDerivedStateFromProps ◦

    render ◦ componentDidMount React • Updating ◦ getDerivedStateFromProps ◦ shouldComponentUpdate ◦ render ◦ getSnapshotBeforeUpdate ◦ componentDidUpdate • Unmounting ◦ componentWillUnmount
  10. O caminho para o React 1. React Tutorial 2. CS50's

    Mobile App Development with React Native React
  11. O que é? • Um conjunto de componentes para Mobile

    • Prover acesso a API nativa (iOS e Android) • Fornece uma Bridge com a parte nativa React Native
  12. Conceitos principais • Os mesmos do React • Estilizar com

    JS ◦ Posicionamento e layout com Flexbox ◦ Ex: StyleSheet.create( { bigGreen: { fontSize: 20, color: ‘green’ } ); • Não temos mais HTML, no lugar temos os componentes fornecidos pelo React Native, ex: View • Hello World: https://snack.expo.io/r1xHxH-Q7 React
  13. O caminho para React Native 1. React Native Docs 2.

    CS50's Mobile App Development with React Native 3. Yoga React Native
  14. Simplicidade: feature branch • O master sempre está num estado

    deployable, ou seja, pode ir para produção • Todas as mudanças são feitas através de pull requests + merge, através da criação de features branches. Os commits direto na master estão desabilitados • Para resolver conflitos e atualizar com a master, use rebase na sua feature branch Fluxo Git recomendado
  15. Conceitos por trás da organização • Separação de responsabilidade ◦

    Ex: toda comunicação com serviços externos (ex: API), fica dentro da pasta api ◦ Lógicas de view da aplicação (ex: mostrar modal de alerta) ficam dentro de scenes e na common, ficam componentes com lógicas mais triviais (ex: desabilitar botão após o click) ◦ Componentes com lógicas, contém um arquivo [componente].container.js, com a sua lógica (ex: controle de estado), e um arquivo [componente].js, com a declaração da view em si ◦ Detalhes de implementação de estilo ficam no nível mais baixo de componentes (ex: common/Button/Button.js) - e devem ser os menores possível Separação de conceitos e isomorfismo
  16. Conceitos por trás da organização • Separação por módulos ◦

    Ex: em scenes/Dashboard, ficará tudo que é necessário para o dashboard, podendo haver reuso de outros componentes que estão em common ◦ Não pode ter import para outros módulos Separação de conceitos e isomorfismo
  17. Isomorfismo • Utilizando o maior benefício do React Native, ao

    máximo: reuso de código Demais camadas reuso de código Views/Services código específico Separação de conceitos e isomorfismo
  18. Isomorfismo • Nossa experiência ◦ Para a parte JS, funciona

    bem ◦ Para a parte de CSS, pouco reuso realmente ocorre, separar acabou sendo melhor Separação de conceitos e isomorfismo
  19. Reforçando os conceitos base • Separação de responsabilidade ◦ Container:

    como funciona ◦ Component: como parece • Desacoplar das libs e do React em si ◦ O que é acoplado: Components & Container ◦ Todo o resto não deve ser, portanto ▪ Container: apenas a cola dos componentes com a lógica da aplicação ▪ Components: apenas como o componente parece Separação de conceitos e isomorfismo
  20. Recomendações • Abstrair o uso de bibliotecas de navegação ◦

    Lib recomendada, pela melhor performance: react-native-navigation ◦ Para Web usar o React Router • Manter o uso da navegação nas scenes Navegação
  21. Estratégias de Storage • Auxilia em vários pontos da aplicação

    ◦ Cache de dados ◦ Recuperação de estado em fluxos ◦ Funcionamento offline • Libs recomendadas ◦ Web: localForage ◦ Nativo: redux-persist ◦ Cenários complexos mobile: Realm Tópicos avançados
  22. Animações • O React Native fornece duas APIs: ◦ LayoutAnimation

    ◦ Animated API • React Native Animatable para animações simples • Atenção para a performance ◦ Usar a flag useNativeDriver ◦ Usar a forma declarativa do React Native Animatable ◦ Testar em smartphones, para o feedback real do impacto das animações Tópicos avançados
  23. Módulos Nativos • Quando criar? ◦ Já existe a implementação

    nativa da funcionalidade ◦ Não existe um componente que expõe as API nativas ◦ A performance JavaScript está ruim • Recomendações ◦ Criar dentro da pasta native_modules ◦ Usar a CLI react-native-create-bridge para criar o “scaffold” do módulo nativo ◦ Vale testar: Electrode Native Tópicos avançados
  24. Segurança • Faça autenticação e autorização apenas no back-end •

    Toda comunicação HTTP, deve ser feita via HTTPS • Ao salvar dados sensíveis use o KeyChain (iOS)/Android Keystore • Faça cache apenas de informações não sensíveis • Não permita a app rodar em jailbroken devices (usando libs como o Jail Monkey) • Mantenha as dependências atualizadas Tópicos avançados
  25. Especificidades de plataforma (Android & iOS) • Deve ser uma

    exceção • O React Native já provê duas formas: ◦ Com o módulo Platform ◦ Com extensões diferentes Tópicos avançados
  26. O que iremos fazer • Instalar o Yarn • Instalar

    a app do Expo • yarn global add create-react-native-app • create-react-native-app vizir-rn • cd vizir-rn && yarn start #01 - Setup do ambiente