GoStack 10.0 || Módulo 06
1. Conceitos abordados
- Iniciar um projeto React Native para mobile app.
- Utilização de ambiente Android.
- Incluir ESLint, Prettier & EditorConfig.
- debug via Reactotron.
- Navegação entre páginas: React Navigation.
- Estilização via Styled Components.
- Acessando dados de API do Github.
- Acessando localstorage do Google Chrome.
2. Desrição do projeto
Um aplicativo mobile para a busca de usuário de Github e ver o perfil e uma lista de seus repositórios marcados com Star.
3. Iniciando o React Native:
Esse projeto foi desenvolvido para o ambiente mobile.
No desenvolvimento do projeto foi usado o emulador mobile: Genymotion.
Instruções para a instalação do Genymotion:
https://docs.rocketseat.dev/ambiente-react-native/android/emulador
Iiniciar o GenyMotion:
./genymotion (na pasta genymotion)
Dentro da pasta do projeto, Para iniciar o bundle:
yarn react-native start
ou
yarn react-native start --reset-cache
Redirecionamento de porta para o uso do debugger: Reactotron.
adb reverse tcp:9090 tcp:9090 ( redirecionar à porta do Reactotron)
Iniciar o app:
yarn react-native run-android
obs. O aplicativo foi desenvolvido para o ambiente Android.
4. Criando o projeto
-
Ambiente de desenvolvimento:
- Instalar NodeJS, JDK e dependencias.
- Instalar SDK do Android.
- Instalar Genymotion (emulador de mobile Android).
- Guideline:
- http://docs.rocketseat.dev
- https://docs.rocketseat.dev/ambiente-react-native/android/linux
-
Iniciando o projeto:
-
yarn react-native init modulo06
- App.js
- Remover comentarios, const, text que não seja "Welocme to React".
- obs. Todos os elementos ja tem display: flex do css.
-
ESLint, Prettier & EditorConfig
-
Criar .editorconfig
-
Add ESLint:
yarn add eslint -D
yarn eslint --init
yarn add prettier eslint-config-prettier eslint-plugin-prettier babel-eslint -D
-
Criar .eslintrc.js
-
Criar .prettierrc
-
Reiniciar o bundle.
-
Configurando o Reactotron
- Debugger pode causar problemas, portanto vamos usar o reactotron:
- Google: Reactotron
2. Link: https://github.com/infinitered/reactotron/releases
3. Download and Install: reactotron-app_2.17.1_amd64.deb
yarn add reactotron-react-native
- Criar src, src/index.js, src/config/ReactotronConfig.js
- Transfere todo o codigo do App.js para src/index.js e deleta App.js
- modulo06/index.js: import App from './src';
- Adicionar ao .eslintrc.js em globals:
__DEV__: 'readonly'
- src/index.js: import './config/ReactotronConfig';
- Se não conectar o Reactotron:
- Se você tem o adb instalado na sua distro Linux provavelmente ele está diferente da versão do Genymotion.
- Seguir o guideline:
- https://medium.com/@birobirobiro/erro-adb-devices-no-genymotion-react-native-735c15594ac6
- Redirecionamento de porta: Terminal:
-
Styled Components
yarn add styled-components
- Criar Main/styles.js
-
Estilizando formulário
- Main/index.js
- Acesso a MaterialIcons:
yarn add react-native-vector-icons
- https://github.com/oblador/react-native-vector-icons
- abrir pasta android/app/build.gradle
project.ext.vectoricons = [
iconFontNames: [ 'MaterialIcons.ttf' ] // Name of the font files you want to copy
]
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
- Main/index.js: import Icon from 'react-native-vector-icons/MaterialIcons'
- Google -> react native vector icons -> github -> site na 1a linha:
- https://oblador.github.io/react-native-vector-icons/
-
Acessando API do Github
- Main/index.js
- Quando o usuario preencher os dados no placeholder e clicar no '+', vamos buscar os dados no github do usuario e adicionar num 'state'.
- Para isso, alteramos a function Main para class.
- obs. no Input: add value e onChangeText. Add returnKeyType e onSubmitEditing.
- função handleAddUser. this.handleAddUser vai no SubmitButton e não no Form (React Native não tem Form).
- API (adicionar axios):
yarn add axios
- Criar src/services/api.js
- import ao handleAddUser.
- import { Keyboard } from 'react-native';
- Keyboard.dismiss();
-
Estilizando a listagem
- List:
- React Native não tem ul, li e não tem .map. React Native ja tem List padrão com barra de rolagem, etc.
- usar FlatList
- Main.index/js e Main/styles.js
-
Loading e disabled
- Main/index.js:
import { Keyboard, ActivityIndicator } from 'react-native';
- Incluir loading no state.
- Main/styles.js: Add opacity.
-
Salvando no storage
- React Native não tem API para localstorage.
yarn add @react-native-community/async-storage
yarn react-native run-android