React.js: Formulários
Afluentes: Desenvolvimento Front-end, 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
.
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'));
O código acima sendo usado no App.js da estrutura de projeto do React.js fica da seguinte forma:
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;