Guia de Desenvolvimento do App: Gerenciador de Tarefas (To-Do List)
src/
├── main.jsx
├── index.css
├── App.jsx
├── App.module.css
└── components/
├── Header/
│ ├── index.jsx
│ └── Header.module.css
├── TaskInput/
│ ├── index.jsx
│ └── TaskInput.module.css
├── TaskList/
│ ├── index.jsx
│ └── TaskList.module.css
├── TaskItem/
│ ├── index.jsx
│ └── TaskItem.module.css
└── Clock/
├── index.jsx
└── Clock.module.css
Cada componente possui seu CSS separado utilizando CSS Modules, garantindo que os estilos sejam isolados e não afetem outros componentes.
- Ponto de entrada da aplicação.
- Renderiza o componente
<App />
dentro doroot
doindex.html
. - Inclui os estilos globais
index.css
.
- Componente principal que gerencia o estado da aplicação.
- Estados (
useState
):tasks
: array de tarefas com propriedades{ id, text, completed }
.
- Efeitos (
useEffect
):- Salva e carrega tarefas do
localStorage
para persistência.
- Salva e carrega tarefas do
- Funções principais:
addTask(task)
: adiciona uma nova tarefa.toggleTask(id)
: marca tarefa como concluída ou pendente.editTask(id, newText)
: edita o texto de uma tarefa.deleteTask(id)
: exclui uma tarefa.restoreTask(id)
: restaura uma tarefa concluída para pendente.
- Divide a tela em dois containers:
- Tarefas pendentes (editáveis)
- Tarefas concluídas (apenas restaurar)
- Inclui o componente
<Clock />
que exibe data e hora em tempo real.
- Exibe o título do aplicativo.
- Simples, com estilo centralizado e cores elegantes.
- Utiliza
useState
para armazenar a data e hora atuais. - Utiliza
useEffect
para atualizar o relógio a cada segundo comsetInterval
. - Exibe data e hora em elementos
<span>
lado a lado. - Estilizado com cores e fundo azul elegante.
- Formulário para inserir novas tarefas.
- Controla o valor do input com
useState
. - Ao submeter (
onSubmit
), chamaaddTask
doApp.jsx
. - Botão estilizado para adicionar tarefas.
- Recebe lista de tarefas (pendentes ou concluídas) via props.
- Mapeia cada tarefa para um
<TaskItem />
. - Recebe
isCompletedList
como prop para ajustar comportamento:- Pendentes: editáveis e concluíveis
- Concluídas: apenas restaurar
- Cada tarefa individual.
- Controla estado de edição (
isEditing
) comuseState
. - Aplica diferentes estilos se a tarefa estiver concluída (
completedHighlight
). - Funções:
handleEdit()
: permite editar tarefa somente se não estiver concluída.- Clique no texto marca tarefa como concluída (pendente → concluída) se não for lista concluída.
- Botão de editar salva alterações ou alterna para modo de edição.
- Botão de deletar remove tarefa ou restaura se for lista de concluídas.
- Estilos incluem destaque para tarefas concluídas e responsividade.
- Permite criar variáveis de estado dentro de componentes funcionais.
- Cada chamada retorna um valor do estado e uma função para atualizá-lo.
- Exemplo no App:
const [tasks, setTasks] = useState([]); // lista de tarefas
- Sempre que o estado muda, o React re-renderiza o componente com os novos valores.
- Permite executar efeitos colaterais dentro do componente, como acessar API ou
localStorage
. - Pode ser configurado para rodar:
- Sempre que o componente renderiza
- Apenas na primeira renderização (
[]
) - Sempre que uma variável específica mudar (
[tasks]
)
- Exemplo no App:
useEffect(() => {
localStorage.setItem("tasks", JSON.stringify(tasks));
}, [tasks]); // salva tarefas sempre que mudar
- Também usado no
Clock
para atualizar a hora a cada segundo.
+----------------+
| App.jsx |
|(estado tasks) |
+--------+-------+
|
+--------v--------+
| TaskInput | <-- adiciona nova tarefa
+--------+--------+
|
+-------v-------+
| TaskList | <-- lista pendentes ou concluídas
+---+--------+---+
| |
+-------v-+ +-v-------+
| TaskItem| | TaskItem| <-- tarefas individuais
+---+-----+ +----+---+
| |
toggleTask() restoreTask()
editTask() deleteTask()
- Fluxo resumido:
- Usuário adiciona tarefa via
TaskInput
→ atualiza estadotasks
TaskList
renderiza cadaTaskItem
de acordo com o estadoTaskItem
pode ser editado, concluído ou restauradouseEffect
salva tarefas nolocalStorage
Clock
exibe data/hora em tempo real
- Usuário adiciona tarefa via
- useState: gerencia estado local de cada componente e da lista de tarefas.
- useEffect: mantém persistência no localStorage e atualiza relógio em tempo real.
- Props: passam funções e estados entre componentes para comunicação hierárquica.
- CSS Modules: evita conflitos de nomes e mantém estilo encapsulado.
- Responsividade: media queries ajustam containers e relógio em telas pequenas.
- Separação de responsabilidades: cada componente tem uma função clara (Input, Lista, Item, Header, Clock).
- Interatividade: tarefas pendentes podem ser editadas e concluídas; tarefas concluídas podem ser restauradas.
- Acessibilidade: botões possuem texto ou ícone claro indicando ação (✏️, 💾, ✕, ↩️).
- Sempre comentar código explicando o que cada função faz.
- Utilizar CSS Modules para manter estilo isolado.
- Manter lógica de estado clara, separando funções de adição, edição, conclusão e restauração.
- Testar a responsividade em diferentes tamanhos de tela.
- Aproveitar hooks do React (
useState
,useEffect
) para funcionalidades dinâmicas.