21
loading...
This website collects cookies to deliver better user experience
npx create-react-app todolist
App.test.js
index.css
logo.svg
reportWebVitals.js
setupTests.js
import { useState } from 'react';
const [ todo, setTodo ] = useState([]);
-Todo representa o primeiro valor, logo o estado atual.
-setTodo representa o segundo valor, logo a função que irá realizar as alterações. (Por padrão costumamos nomear o segundo valor com "set" e logo após o nome dado ao primeiro valor).
const [newTodo, setNewTodo] = useState('');
Dessa vez o estado inicial é uma string vazia, pois é o valor inicial do input do tipo texto que iremos inserir na nossa aplicação.
function App() {
const [todo, setTodo] = useState([]);
const [newTodo, setNewTodo] = useState('');
return (
<>
<h1>Todo List</h1>
<input
type="text"
value={newTodo}
onChange={(item) => setNewTodo(item.target.value)}
/>
</>
);
}
Para envolvermos várias tags HTML, podemos utilizar uma div ou então fragments <></> e todo o conteudo dentro do mesmo.
Criamos um input do tipo texto; no valor passamos o newTodo, sendo identico ao do estado já criado e onChange passamos uma função, onde conforme o estado é alterado, ele atualiza seu valor (value={newTodo}).
Para que possamos adicionar esse valor em uma lista, iremos adicionar um botão que ao ser clicado, chamará a função addNewTodo:
function addNewTodo() {
setTodo([...todo, newTodo]);
setNewTodo('');
}
Na primeira linha, chamamos a função do nosso primeiro estado, onde seu valor inicial é um array vazio e definimos agora que seu valor será tudo que estava presente nesse array antes (para isso utilizamos o spread), e no segundo parâmetro passamos o newTodo, ou seja, toda alteração que for feita nesse estado, após ser clicado no botão de "Adicionar", essa alteração/valor será adicionado ao nosso estado inicial da aplicação (todo).
Já na segunda linha, definimos que ao adicionar o novo valor no nosso estado, não podemos deixar o valor/texto do nosso input com o que foi digitado, devemos retirar tudo e transformar nosso estado inicial em uma string vazia novamente.
<button onClick={() => addNewTodo()}>Adicionar</button>
Recapitulando: Ao ser clicado, chamará nossa função addNewTodo(), que irá adicionar o novo valor ao nosso estado atual e logo após resetar o valor escrito no input.
<ul>
{todo.map((item) => (
<li>
{item}
</li>
))}
</ul>
Escrevemos o código entre chaves pra mostrar que se trata de um código javascript e não HTML.
<button onClick={() => removeTodo(index)}>Deletar</button>
{todo.map((item, index) => (
<li>
{item}
<button onClick={() => removeTodo(index)}>Deletar</button>
</li>
))}
function removeTodo(index) {
let tmpArray = [...todo];
tmpArray.splice(index, 1);
setTodo(tmpArray);
}
O método splice() altera o conteúdo de uma lista, adicionando novos elementos enquanto remove elementos antigos.
import { useState } from 'react';
function App() {
const [todo, setTodo] = useState([]);
const [newTodo, setNewTodo] = useState('');
function addNewTodo() {
setTodo([...todo, newTodo]);
setNewTodo('');
}
function removeTodo(index) {
let tmpArray = [...todo];
tmpArray.splice(index, 1);
setTodo(tmpArray);
}
return (
<>
<h1>Todo List</h1>
<input
type="text"
value={newTodo}
onChange={(item) => setNewTodo(item.target.value)}
/>
<button onClick={() => addNewTodo()}>Adicionar</button>
<ul>
{todo.map((item, index) => (
<li>
{item}
<button onClick={() => removeTodo(index)}>Deletar</button>
</li>
))}
</ul>
</>
);
}
export default App;