Skip to content

Latest commit

 

History

History
103 lines (80 loc) · 3.89 KB

Terminar-logica-do-projecto.md

File metadata and controls

103 lines (80 loc) · 3.89 KB

Terminar a lógica do projecto

Ok, o que é que nos falta fazer?

Bem ... quando clicamos no botão de "Adicionar Tarefa" dentro do componente FormularioTarefa queremos passar essa informação ao componente "pai" - App - para que este actualize o array tarefas e mostre naquela lista que criamos.

Como é que fazemos isso?

Bem, primeiro temos de criar uma estrutura para manter registo do valor que está escrito dentro do input - para isso vamos usar os hooks que já conhecemos:

import { useState } from 'react';
import Botao from '../Botao/Botao';

function FormularioTarefa() {
    const [novaTarefa, setNovaTarefa] = useState("")
    return (
        <div>
            <input type="text" placeholder="Introduz a tua tarefa"/>
            <Botao type="warning" 
                   title="Adicionar" 
                   onClickHandler={() => alert("Alguém clicou no botão de adicionar tarefa")}/>
        </div>        
    );
}

export default FormularioTarefa;

Como consegues ver, a tarefa é inicializada como uma String vazia.

Ok, agora vamos criar um mecanismo que garante que a variável novaTarefa é actualizada sempre que alguém escreve no campo de input.

Para isso, vamos chamar a função setTarefa com o valor e.target.value - para entenderes isto tens de perceber que sempre que há uma alteração num elemento de input este automaticamente gera um evento que podes consultar.

import { useState } from 'react';
import Botao from '../Botao/Botao';

function FormularioTarefa() {
    const [novaTarefa, setNovaTarefa] = useState("")
    return (
        <div>
            <input type="text" placeholder="Introduz a tua tarefa"
                   onChange={(e) => setNovaTarefa(e.target.value)}/>
            <Botao type="warning" 
                   title="Adicionar" 
                   onClickHandler={() => alert("Alguém clicou no botão de adicionar tarefa")}/>
        </div>        
    );
}

export default FormularioTarefa;

OK, agora vamos testar este mecanismo simplesmente lançando um alerta com o valor actualizado da variável novaTarefa:

import { useState } from 'react';
import Botao from '../Botao/Botao';

function FormularioTarefa() {
    const [novaTarefa, setNovaTarefa] = useState("")
    return (
        <div>
            <input type="text" placeholder="Introduz a tua tarefa"
                   onChange={(e) => setNovaTarefa(e.target.value)}/>
            <Botao type="warning" 
                   title="Adicionar" 
                   onClickHandler={() => alert(novaTarefa)}/>
        </div>        
    );
}

export default FormularioTarefa;

Screenshot 2022-02-02 at 21 26 50

Finalmente, vamos invocar a função onTarefaCriada que é passada pelo componente pai, de forma a podermos comunicar ao componente App sempre que uma nova tarefa for criada:

import { useState } from 'react';
import Botao from '../Botao/Botao';

function FormularioTarefa(props) {
    const [novaTarefa, setNovaTarefa] = useState("")
    return (
        <div>
            <input type="text" placeholder="Introduz a tua tarefa"
                   onChange={(e) => setNovaTarefa(e.target.value)}/>
            <Botao type="warning" 
                   title="Adicionar" 
                   onClickHandler={() => props.onTarefaCriada(novaTarefa)}/>
        </div>        
    );
}

export default FormularioTarefa;

E agora conseguimos ver a nossa tarefa na lista!

Screenshot 2022-02-02 at 21 32 32