Mudanças entre as edições de "React.js: Formulários"

De Aulas
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 135: Linha 135:
 
Controlamos as múltiplas entradas com o atributo <code>name</code> do campo. Isso vai estar dentro do objeto <code>event</code>. Para alterar um elemento, usamos o método <code>this.setState</code>.
 
Controlamos as múltiplas entradas com o atributo <code>name</code> do campo. Isso vai estar dentro do objeto <code>event</code>. Para alterar um elemento, usamos o método <code>this.setState</code>.
  
<syntaxhighlight lang=javascript>
+
Aqui vamos criar uma aplicação para testar, então usamos o npx
class MyForm extends React.Component {
 
  constructor(props) {
 
    super(props);
 
    this.state = {
 
      username: '',
 
      age: null,
 
    };
 
  }
 
  myChangeHandler = (event) => {
 
    let nam = event.target.name;
 
    let val = event.target.value;
 
    this.setState({[nam]: val});
 
  }
 
  render() {
 
    return (
 
      <form>
 
      <h1>Hello {this.state.username} {this.state.age}</h1>
 
      <p>Enter your name:</p>
 
      <input
 
        type='text'
 
        name='username'
 
        onChange={this.myChangeHandler}
 
      />
 
      <p>Enter your age:</p>
 
      <input
 
        type='text'
 
        name='age'
 
        onChange={this.myChangeHandler}
 
      />
 
      </form>
 
    );
 
  }
 
}
 
  
ReactDOM.render(<MyForm />, document.getElementById('root'));
+
npx create-react-app app_name
</syntaxhighlight>
 
  
O código acima sendo usado no App.js da estrutura de projeto do React.js fica da seguinte forma:
+
onde <code>app_name</code> deve ser substituído pelo nome da aplicação que você quer criar. Depois alteramos o arquivo App.js conforme o código abaixo:
  
 
<syntaxhighlight lang=javascript>
 
<syntaxhighlight lang=javascript>
Linha 215: Linha 181:
 
export default App;
 
export default App;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
= Atividade =
 +
 +
Crie uma aplicação com um formulário de cadastro de (funcionário, cliente, fornecedor, etc.) e valide os campos enquanto o usuário do sistema está entrando com as informações. Ao submeter, monte um texto no estilo carta formal que será usado para enviar um e-mail com todas as informações digitadas.
 +
 +
'''Observações''':
 +
 +
* Você deve implementar a atividade em uma aplicação criada com o npx create-react-app.
 +
* O botão enviar só ficará habilitado após o formulário estar totalmente validado.
 +
* O texto do e-mail só irá aparecer depois de clicar no botão enviar.
 +
* Faça o uso de classes e funções.
 +
* Utilize ''states''.

Edição atual tal como às 09h23min de 18 de abril de 2024

Afluentes: Desenvolvimento Front-end II, Usabilidade, desenvolvimento web, mobile e jogos

Forms React

Os formulários são adicionados como qualquer outro elemento.

class MyForm extends React.Component {
  render() {
    return (
      <form>
        <h1>Hello</h1>
        <p>Enter your name:</p>
        <input
          type="text"
        />
      </form>
    );
  }
}
ReactDOM.render(<MyForm />, document.getElementById('root'));

Gerenciando os Forms

  • Podemos gerenciar em tempo de execução os dados dos formulários quando eles mudam de valor ou são enviados.
  • No HTML a gente vê como objetos DOM, no React, os dados são vistos como componentes.
  • Quando um dado é pego por um componente, ele é armazenado no state.
  • Você pode controlar os eventos com o atributo onChange.
class MyForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = { username: '' };
  }
  myChangeHandler = (event) => {
    this.setState({username: event.target.value});
  }
  render() {
    return (
      <form>
      <h1>Hello {this.state.username}</h1>
      <p>Enter your name:</p>
      <input
        type='text'
        onChange={this.myChangeHandler}
      />
      </form>
    );
  }
}

ReactDOM.render(<MyForm />, document.getElementById('root'));

Renderização Condicional

Podemos usar condicionais para renderizar de forma diferente o HTML.

Por exemplo, criamos um objeto chamado header em que quando o campo username estiver vazio, ele é renderizado vazio, quando o campo username não estiver vazio, ele coloca outras informações adicionais e coloca dentro de tags de título.

class MyForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = { username: '' };
  }
  myChangeHandler = (event) => {
    this.setState({username: event.target.value});
  }
  render() {
    let header = '';
    if (this.state.username) {
      header = <h1>Hello {this.state.username}</h1>;
    } else {
      header = '';
    }
    return (
      <form>
      {header}
      <p>Enter your name:</p>
      <input
        type='text'
        onChange={this.myChangeHandler}
      />
      </form>
    );
  }
}

ReactDOM.render(<MyForm />, document.getElementById('root'));

Submit Forms

Você pode controlar o envio de um formulário gerenciando o evento de envio do formulário chamando no atributo onSubmit o método que escrevemos para analizar tratar o evento.

class MyForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = { username: '' };
  }
  mySubmitHandler = (event) => {
    event.preventDefault();
    alert("You are submitting " + this.state.username);
  }
  myChangeHandler = (event) => {
    this.setState({username: event.target.value});
  }
  render() {
    return (
      <form onSubmit={this.mySubmitHandler}>
      <h1>Hello {this.state.username}</h1>
      <p>Enter your name, and submit:</p>
      <input
        type='text'
        onChange={this.myChangeHandler}
      />
      <input
        type='submit'
      />
      </form>
    );
  }
}

ReactDOM.render(<MyForm />, document.getElementById('root'));

Múltiplas entradas de dados

Controlamos as múltiplas entradas com o atributo name do campo. Isso vai estar dentro do objeto event. Para alterar um elemento, usamos o método this.setState.

Aqui vamos criar uma aplicação para testar, então usamos o npx

npx create-react-app app_name

onde app_name deve ser substituído pelo nome da aplicação que você quer criar. Depois alteramos o arquivo App.js conforme o código abaixo:

import './App.css';
import { Component } from 'react';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      username: '',
      age: null,
    };
  }
  myChangeHandler = (event) => {
    let nam = event.target.name;
    let val = event.target.value;
    this.setState({ [nam]: val });
  }
  render() {
    return (
      <form>
        <h1>Hello {this.state.username} {this.state.age}</h1>
        <p>Enter your name:</p>
        <input
          type='text'
          name='username'
          onChange={this.myChangeHandler}
        />
        <p>Enter your age:</p>
        <input
          type='text'
          name='age'
          onChange={this.myChangeHandler}
        />
      </form>
    );
  }
}

export default App;

Atividade

Crie uma aplicação com um formulário de cadastro de (funcionário, cliente, fornecedor, etc.) e valide os campos enquanto o usuário do sistema está entrando com as informações. Ao submeter, monte um texto no estilo carta formal que será usado para enviar um e-mail com todas as informações digitadas.

Observações:

  • Você deve implementar a atividade em uma aplicação criada com o npx create-react-app.
  • O botão enviar só ficará habilitado após o formulário estar totalmente validado.
  • O texto do e-mail só irá aparecer depois de clicar no botão enviar.
  • Faça o uso de classes e funções.
  • Utilize states.