Simples e fácil de usar, a biblioteca React-Draggable aplica transformações CSS aos componentes React, permitindo que você arrastar componentes em uma IU . Com diferentes adereços que permitem alterar o comportamento dos componentes, React-Draggable é uma ótima escolha para criar intuitivo, interfaces amigáveis.
Neste tutorial, exploraremos o React-Draggable em profundidade criando uma lista de tarefas com componentes arrastáveis. Vamos começar!
Instalando o React-Draggable
Antes de instalar o React-Draggable, certifique-se de ter um projeto React configurado em sua máquina local. Navegue até o projeto e execute o seguinte comando no terminal:
npm install react-draggable
Agora, importaremos o componente
Adicione o seguinte código ao App.js:
import Draggable from”react-draggable”; function App () {return (
); } exportar aplicativo padrão;
O código acima renderizará a seguinte saída no navegador:
Agora que você sabe como funciona a biblioteca React-Draggable, vamos começar nossa lista de tarefas.
Configurando um aplicativo React
Com a biblioteca React-Draggable instalada, podemos configurar a estrutura de arquivo necessária para nosso projeto e revisar os componentes de que precisaremos. Para atribuir chaves exclusivas aos componentes principais, precisaremos instalar um UUID () da seguinte maneira:
npm i uuid
Nossa estrutura de pastas será semelhante à imagem abaixo:
Criando a lista de tarefas
Dividimos a lógica de nosso projeto em três componentes diferentes. Nossa lista de tarefas usará três colunas para renderizar suas respectivas tarefas.
Vamos adicionar um elemento de formulário para obter a entrada do usuário e adicionar a tarefa no respectivo componente. Nosso arquivo App.js lida com a lista de tarefas principal em seu estado:
import”./App.css”; import {useState} de”react”; função App () {const [tarefas, setTasks]=useState ([]); const [addItem, setAddItem]=useState (false); const handleSubmit=()=> {setAddItem (! addItem); }; const addTask=(tarefa)=> {setTasks (tarefa); }; return (
); } exportar aplicativo padrão;
No código acima, adicionamos as seguintes funções:
tasks: contém a matriz de tarefas que serão renderizadas na tela addItem: o estado para mostrar e ocultar o elemento AddForm, que adiciona uma tarefa
Agora que temos os estados prontos, vamos criar os outros componentes.
Componente do cabeçalho
Adicione o seguinte código ao Header.js:
import React from”reagir”; exportar a função padrão Header ({handleSubmit}) {return (
Planejamento
Em andamento
Concluído
); }
O obtém a função handleSubmit como um prop, que mostrará o elemento AddForm. Com nosso cabeçalho configurado, vamos criar o elemento AddForm:
Elemento AddForm
Adicione o seguinte código a AddTaskForm.js:
import React, {useState} from”react”; importar {v4 como uuidv4} de”uuid”; função padrão de exportação AddTaskForm ({setAddItem, addItem, tasks, setTasks}) {const [name, setName]=useState (“”); const [descrição, setDescription]=useState (“”); const [opção, setOption]=useState (“”); const handleSubmit=(e)=> {e.preventDefault (); deixe newTask={id: uuidv4 (), nome: nome, descrição: descrição, linha do tempo: opção,}; setTasks ([… tarefas, novaTarefa]); setAddItem (! addItem); }; return (
); }
No bloco de código acima, temos campos de entrada que receberão dados relevantes fornecidos pelos usuários. Cada tarefa tem um id, nome, data e linha do tempo, que são obtidos pelo elemento select.
Quando o formulário é enviado, cada tarefa será adicionada à lista de tarefas que criamos no App.js. Quando o formulário for enviado com sucesso, ele ficará oculto.
Criando as colunas
Em nossa lista de tarefas, teremos três colunas intituladas Planejamento, Em andamento e Concluído. Vamos criar esses componentes e adicionar seus respectivos códigos:
Planning.js
import React de”react”; importar cartão de”./Card”; exportar função padrão Planning ({tasks, addTask}) {return (> {tasks.filter ((item)=> item.timeline===”planning”).map ((e)=> (
InProgress.js
importar React de”react”; importar cartão de”./Card”; exportar a função padrão InProgress ({tasks, addTask}) {return (> {tasks.filter ((item)=> item.timeline===”inprogress”).map ((e)=> (
Done.js
importar React de”react”; importar cartão de”./Card”; exportar função padrão Concluído ({tarefas, addTask}) {return (> {tarefas.filter ((item)=> item.timeline===”feito”).map ((e)=> (
Você deve ter notado que todos esses componentes possuem uma lógica semelhante. Estamos obtendo as tarefas e filtrando-as com base em sua linha do tempo usando tasks.filter (), que remove os objetos de tarefa que não pertencem à coluna.
Por exemplo, no componente de planejamento, filter () irá remover todos os objetos que não possuem a string de planejamento em seu atributo de linha do tempo.
A matriz retorna um resultado e renderiza um componente
import React from”react”; importar arrastável de”react-draggable”; exportar função padrão Card ({currentTask, tasks, addTask}) {return (
{currentTask.name && currentTask.name}
{const newTaskList=tasks.filter ((item)=> { if (item.id!=currentTask.id) {return item;}}); addTask (newTaskList);}} src=’http://brsrc.atsit.in/wp-content/uploads/2021/09/crie-componentes-arrastaveis-e2808be2808bcom-react-draggable-1.png’style={{height:”20px”, width:”20px”}}/>
{currentTask.description}
); }
O componente
O div pai
Excluindo a tarefa
Para remover uma tarefa, adicione o código abaixo:
const newTaskList=tasks.filter ((item)=> {if (item.id!=currentTask.id) {return item;}}); addTask (newTaskList);
O bloco de código acima obtém toda a lista de tarefas do App.js e, em seguida, cria uma nova lista que exclui a tarefa atual. A seguir, vamos importar cada componente em App.js:
import”./App.css”; import {useState} de”react”; import Header from”./Header”; importar o planejamento de”./Planning”; importar InProgress de”./InProgress”; importar Concluído de”./Concluído”; importar AddTaskForm de”./AddTaskForm”; função App () {const [tarefas, setTasks]=useState ([]); const [addItem, setAddItem]=useState (false); const handleSubmit=()=> {setAddItem (! addItem); }; const addTask=(tarefa)=> {setTasks (tarefa); }; return (
{addItem && (
); } exportar aplicativo padrão;
Finalmente, adicionaremos estilos à nossa lista de tarefas. Adicione o seguinte código em App.css:
.mainGrid {display: flex; direção flexível: fileira; justify-content: espaço entre; flex-wrap: wrap; altura: 100vh; }.header {display: flex; direção flexível: fileira; justify-content: space-around; flex-wrap: wrap; cor de fundo: rgb (205, 240, 240)}.column {largura: 32vw; display: flex; direção flexível: coluna; borda: 5px cinza sólido; cor de fundo: azul; estouro: oculto; }.card {border: 1px sólido preto; cor de fundo: branco; }.card p {font-size: 10px; largura: 30vw; }.heading {display: flex; direção flexível: fileira; alinhar-itens: centro; justify-content: espaço entre; }.addButton {posição: absoluto; topo: 2,5%; esquerda: 0%; }.addForm {altura: 50vh; largura: 50vw; cor de fundo: azul claro; display: flex; alinhar-itens: centro; justificar-conteúdo: centro; direção flexível: coluna; posição: absoluta; topo: 25%; esquerda: 25%; }.addForm form {display: flex; alinhar-itens: centro; justificar-conteúdo: centro; direção flexível: coluna; }
Quando executamos o projeto e adicionamos um item à nossa lista de tarefas, a saída será semelhante à imagem abaixo:
Essas tarefas podem ser movidas dentro de seus respectivas colunas:
Para excluir uma tarefa, basta clicar no ícone excluir .
Conclusão
Adicionando movimento para componentes em seu aplicativo traz benefícios para sua IU, como melhor interesse visual e melhor organização. A biblioteca React-Draggable é uma ótima escolha por sua simplicidade e funcionalidade.
Neste tutorial, usamos React-Draggable para criar uma lista de tarefas. Para saber mais sobre React-Draggable, certifique-se de visitar a página GitHub .