React | Node JS | React Native | Licença
O Projeto da Next Level Week Desta semana é um widget de enviar feedback para os usuários enviarem suas opinioes e relatar problemas ao navegar em seu site! evento oferecido pela @Rocketseat
Neste projeto o usuário escolhe um tipo de feedback a ser enviado, depois disto é inserido uma descrição ao feedback e opcionalmente a foto junto com o feedback a ser enviado, após enviar o feedback será registrado no banco de dados e será enviado um Email ao proprietário da aplicação
Acesse a aplicação em funcionamento! Link: https://nlw8return.vercel.app/
- ReactJS
- Typescript
- NodeJS
- Vite
- Express
- Prisma
- TailwindCSS
- Headless UI > acessibilidade
- html2canvas
- phosphor-react
- nodemailer
- React Native
- ExpoGo
- Assim que o projeto foi dado fiquei chocado, é uma ideia incrível para um evento como esse e pretendo colocar no meu portfólio!
- Ver sobre react strict mode
- Reakit/areakit/radix/headlessUI > acessibilidade
cd serveryarn dev> inicia o servidoryarn prisma studio- SQLite:
- mude o provider
./prisma/schema.prismapara o SQL (descomente a linha...) npx prisma migrate dev> Refaça as migrações no banco de dados, pois elas salvam o tipo de banco de dados (sqlite, postgres, mongo, etc).
- mude o provider
- Deploy (Railway):
yarn build> Converte arquivos Typescript para Javascriptyarn start|npm run start> Inicia a partir dos arquivos Javascriptnpx prisma migrate dev> faz as migrações no banco de dados- Faça deploy da pasta
./dist, normalmente o site irá fazer a build automaticamente, podendo ser possível realizar o deploy de toda a aplicação, não somente a pasta dist! - Start Command:
npx prisma migrate deploy> faz as migrations no banco de dados
cd webyarn dev
cd mobile- Mudar o baseURL no
src/lib/apipara seu ipv4 expo start- Acesse pelo aplicativo Expo Go
- Tailwind: https://tailwindcss.com/docs/installation > html/js nativo
- usado: https://tailwindcss.com/docs/installation/using-postcss > react precisa do PostCSS
- Tailwind tem ResetCSS
- HeadlessUI parece ser muito bom...
- Caso for utilizar muitos componentes parecidos repetidamente pode se criar um array/objeto e transformá-lo em html, assim no html em sí só terá a desestruturação deste.
- Object.entries()
type example = typeof {X: {...}}- Screenshot > html2canvas
- colocar o ! no final de um valor diz para confiar que ele nunca será nulo.
- EX:
document.querySelector('body')!ou seja, você diz que sempre vai existir o body.
- EX:
-
npm create vite@latest> template vite, selecione: react e typescript -
cd web> Entra no diretório -
npm install> instala as dependências -
npm install -D tailwindcss postcss autoprefixer> instala o tailwindnpx tailwindcss init -p> cria as config, com o PostCSS-p- tailwind.config.js
module.exports = { content: ["./src/**/*.tsx"], theme: { extend: {}, }, plugins: [], }
-
npm install phosphor-react> ícones utilizados. -
npm install @headlessui/react> acessibilidade. -
npm install -D @tailwindcss/forms> tailwind para formulários (coloca nos plugins) -
npm install -D tailwind-scrollbar> muda a scrollbar (coloque nos plugins) -
npm install html2canvas> biblioteca para o screenshot. -
npm install axios> requisições http.
- no ts-config precisa colocar o
rootDire ooutDir, além de ser possível utilizar uma versão mais atualizada do javascript(2020) notarget. - Rotas:
// GET = Buscar informações // POST = Cadastrar informações // PUT = Atualizar informações de uma entidade // PATCH = Atualizar UMA informação única de uma entidade
- crie um script no package:
"dev": "ts-node-dev src/server.ts" - Em desenvolvimento: SQLite, em produção: Postgress, utilizando o prisma (ORM)
- Envio de Emails: Gmail(+/-), Mailgun, sparkpost, mailchimp
- mailtrap > testar emails (em desenvolvimento)
- Cors
ou não passe o objeto e será aberto para todos, qualquer um poderá utilizar da API
app.use(cors({ origin: "http://localhost:3000" }))
// Create feedback
// Coloque no console em http://localhost:3333
fetch("http://localhost:3333/feedbacks", {
method: "POST",
body: JSON.stringify({
"type": "BUG",
"comment": "Está tudo crazy!"
}),
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res).then(console.log);
//}).then((res) => res.json()).then(console.log); se o retorno tiver um jsoncd servernpm initnpm i typescript @types/node ts-node-dev -D> live-reload com typesscriptnpx tsc --init> cria as config do typescriptnpx tsc> gera o arquivo em javascript /distyarn dev> roda a aplicaçãonpm i express> express - rotasnpm i @types/express -D> tipagem do express- Add Prisma
npm i prisma -D> instala o prismanpm i @prisma/client> prisma em produçãonpx prisma init> inicia o prisma- Acesse Prisma/Sqlite e modifique seu
schema.prismae coloque a url no.envcriado npx prisma migrate dev> migrar banco de dados em dev (dev/deploy)npx prisma studio> visualizar os dados no seu banco
- Envio de emails:
npm install nodemailer> biblioteca de emailsnpm install @types/nodemailer> biblioteca de emails
- Testes Automatizados (Jest)
npm install jest -D> instala o jestnpx jest --init> configura o jest (yes, yes, node, yes, v8, yes)npm install ts-node -D> typescript no jestnpm install @types/jest -D> typescript no jest- SWC >
npm i -D jest @swc/jest> Jest não entende arquivos tsc, então é necessário um compilador (ts-jest, babel), porém o swc é muito mais rápido, e poderia até mesmo rodar toda a aplicação utilizando ele. Siga os passos na Doc. yarn test- /coverage/lcov-report/index.html > ver o quanto o teste está cobrindo do código
npm install cors> controle de segurança, definir quem pode consumir os dadosnpm install @types/cors -D> typescript
- expo
- NUNCA UTILIZE DAS FUNÇÕES DO REACT-NATIVE-GESTURE-HANDLER pois estas funções geram um erro invisível que atrapalha os emuladores, buga os códigos nas builds. simplesmente busque por outra opção ou veja se o módulo atualizou!
-
cd mobile -
Expo:
expo init mobile> inicia um projeto expo (blank typescript)expo install expo-font @expo-google-fonts/NOME_DA_FONTE> fonte no react (inter)expo install expo-app-loading> carregamento assíncrono de fontesexpo install react-native-svg> utilizar svg nos projetosexpo start -c> Inicia o projeto.-climpa o cacheexpo install expo-file-system> lida com conversão de arquivo ex: (png > base64)
-
yarn add phosphor-react-native> icones do react native -
yarn add react-native-iphone-x-helper> lida com margens de baixo em telas -
expo install @gorhom/bottom-sheet@^4> slides/arrastar telasexpo install react-native-reanimated react-native-gesture-handler> dependencia do BottomSheetplugins: ['react-native-reanimated/plugin']> adicionar no babel- importe o gesture handler no início do
App.tsx
-
yarn add react-native-view-shot> biblioteca de screenshot -
yarn add axios> requisições http
-
#NextLevel
-
#NeverStopLearning
-
#NewSkills
-
#StepByStep
-
Por algum motivo durante as aulas 2 relógios aqui de casa pararam no mesmo horário, então decidi anotar essa atividade paranormal '-'
- 11:40:46
- 11:34:40
Note que este projeto está sob a licença MIT. Veja o arquivo para mais detalhes: LICENSE











