🚧 README em construção... 🚧
Aplicação React de uma To Do List com um cronômetro para cada tarefa. Projeto desenvolvido com template TypeScript, utilizando conceitos muito utilizados no React como DRY (Dont Repeat Yoursel) e SRP (Single Responsability Principal).
-
Atualmente é a biblioteca mais utilizada de JavaScript segundo pesquisas. Para criar o projeto foi utilizada a biblioteca Create React App para criar a estrutura inicial com base nos padrões comuns adotados pela comunidade, juntamente com o template Typescript pois possui todas as configurações necessárias para usar Typecript no projeto. Foram utilizados na aplicação: conceito de DRY (Dont Repeat Yoursel), usado para criar componentes reaproveitáveis. Conceito de SRP (Single Responsability Principal), cada função (componentes) do código deve ter uma responsabilidade. Conceito das Props para comunicação entre componentes e Hooks para comunicação com estado interno. Pasta
public
para arquivos estáticos, como imagens, que serão referenciados dinamicamente.O React só irá renderizar ou atualizar um componente quando avisarmos que algo mudou e fazemos isso usando o Hook
useState()
. O state é uma variável que adiciona um valor a ela, porém sempre que esse "estado da variável" muda, o componente, também muda. OuseState
precisa receber uma variável com ostate
em si e uma função para alterar esse estado (comumemente usamos osetState
), ao alterar o estado dessa função (setar um novo item) o React entende que o componente mudou e o atualiza.Hook do React onde consegue-se "monitorar" a mudança do estado e, quando ele mudar, executar uma função para realizar alguma alteração. O useEffect se comporta como um Observable, um conceito muito usado por desenvolvedores Javascript, como por exemplo dentro de um
fetch
ou de umeventListeners
, todos "observam" uma mudança para realizarem alguma ação. O useEffect junta a ideia de Observables com o ciclo de vida do component, que é executado uma vez, assim que o component aparece na tela e depois sempre que alguma variável que estiver dentro do array de dependências atualizar.Para não importar de formar relativa mas sim absoluta. O Typescript e o Javascript possuem uma forma para importar de forma absoluta, sem a necessidade de voltar muitas pastas ou colocar vários paths
'../../'
para importar um arquivo, através do arquivotsconfig.json
oujsconfig.json
. , entre no arquivo e dentro decompilerOptions
acrescente a seguinte linha de código:"compilerOptions": { "baseUrl": "src", //continuação do código }
Dentre inúmeras vantagens que o React proporciona, a componentização é uma das mais conhecidas, além de ser uma das maiores vantagens do React. Para termos uma aplicação no padrão React devemos criar uma pasta para armazenar seus componentes, isso para uma maior facilidade de acesso aos dados. Por isso existe a pasta
components
dentro desrc
. Um component tem um ciclo de vida, ele é montado, compartilha informação e é desmontado. Em geral o ciclo de vida do component é composto por:- componentWillMount (antes de ser montado)
- componentDidMount (acabou de ser montado)
- componentWillUpdate (acabou de atualizar)
- componentWillUnmount (vai ser desmontado) Acima temos os métodos mais importantes que são utilizados para entender o ciclo de vida dos components de forma didática Sobre os componentes temos as seguintes boas práticas:
- O nome do componente deve começar com letra maiúscula pois dentro do próprio HTML existe a possibilidade de criar web-components, que cria tags HTML totalmente customizadas, dentre essas customizações o próprio nome da tag. Portanto para o React diferenciar um React Component de um Web-Component é uma boa prática criar componentes com a primeira letra maiúscula.
- Retornar um JSX ou TSX, pois o componente será transformado em um elemento React e este código quando é passado para o
ReactDOM.render
é transformado em DOM e depois renderizado no HTML.
É uma biblioteca para tipar variáveis em JavaScript. Para criar uma aplicação React utilizando o template padrão de typescript, basta digitar no terminal npx create-react-app nome-do-app --template typescript
É um pré-processador que melhora e agiliza o CSS oferecendo algumas ferramentas que facilitam a escrita, porém os navegadores interpretam apenas CSS portanto o arquivo Sass é compilado para CSS puro.
Para instalar, abra o terminal no diretório do projeto, digite npm install --save-dev sass
e pressionar Enter.
Para conferir se está instalado, verifique no arquivo package.json
se terá uma devDepencies
.
"devDependencies": {
"sass": "^1.55.0",
"typescript-plugin-css-modules": "^3.4.0"
}
reset.css básico no arquivo index.css
-
Solução para não haver sobreposição de código CSS entre componentes. Sass, CSS Modules e Typescript trabalham todas juntas, fazendo conversões para que o código seja compreendido pelos navegadores. Enquanto o Sass facilita a escrita de estilos, o CSS Modules facilita a aplicação desses estilos e o Typescript ajuda na experiência de desenvolvimento dos componentes
typescript-plugin-css-module
é um plugin TypeScript, pode ser encontrado no site da NPMPara instalar, abra o terminal no diretório do projeto, digite
npm install -D typescrypt-plugin-css-modules
e execute o comando. Também é obrigátorio adicionar um plugin no arquivotsconfig.json
, para que a aplicação funcione corretamente, pois é onde está a configuração de TypeScript. Então copia-se apenas a linha"plugins:"
fornecida no site da NPM e cole-a dentro docompilerOptions:
, pois ele já existe no arquivo:{ "compilerOptions": { "plugins": [{"name":"typescript-plugin-css-modules"}], ... } }
Com isso terá terminado a instalação e poderá usar o CSS Modules.
Para utiliza-lo, ao criar arquivos de Sass, crie-os com a extensão
app.modules.scss
. Será importado noindex.tsx
como um objeto. Portanto no topo do código teremosimport style from './app.module.scss'
. OclassName
passará a ser uma variável JavaScriptstyle.app
Por utilizar CSS Modules, para gerar classes únicas para cada componente, temos uma maior facilidade em nomea-las, por isso optamos por um estilo simples de nomeação de classes dentro de cada tag.
Pedro Vinicius Messetti |
---|