Mudanças entre as edições de "React.js: Estados e Eventos"
(Criou página com ' d') |
|||
Linha 1: | Linha 1: | ||
+ | Afluentes: [[Desenvolvimento Front-end]], [[Usabilidade, desenvolvimento web, mobile e jogos]] | ||
− | + | = State React = | |
+ | |||
+ | O objeto <code>state</code> é onde são armazenados valores de propriedades pertencentes ao componente. Quando modificado, há uma nova renderização do componente. Ele é inicializado no construtor. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Car extends React.Component { | ||
+ | constructor(props) { | ||
+ | super(props); | ||
+ | this.state = { | ||
+ | brand: "Ford", | ||
+ | model: "Mustang", | ||
+ | color: "red", | ||
+ | year: 1964 | ||
+ | }; | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <div> | ||
+ | <h1>My Car</h1> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Podemos referenciar o objet <code>state</code> de qualquer lugar do componente usando <code>this.state.nome_da_propriedade</code>. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Car extends React.Component { | ||
+ | constructor(props) { | ||
+ | super(props); | ||
+ | this.state = { | ||
+ | brand: "Ford", | ||
+ | model: "Mustang", | ||
+ | color: "red", | ||
+ | year: 1964 | ||
+ | }; | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <div> | ||
+ | <h1>My {this.state.brand}</h1> | ||
+ | <p> | ||
+ | It is a {this.state.color} | ||
+ | {this.state.model} | ||
+ | from {this.state.year}. | ||
+ | </p> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para modificar o objeto <code>state</code>, usamos o método <code>this.setState()</code>. | ||
+ | |||
+ | No exemplo a seguir, um botão usa o evento <code>onClick</code> que modifica a propriedade da cor. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Car extends React.Component { | ||
+ | constructor(props) { | ||
+ | super(props); | ||
+ | this.state = { | ||
+ | brand: "Ford", | ||
+ | model: "Mustang", | ||
+ | color: "red", | ||
+ | year: 1964 | ||
+ | }; | ||
+ | } | ||
+ | changeColor = () => { | ||
+ | this.setState({color: "blue"}); | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <div> | ||
+ | <h1>My {this.state.brand}</h1> | ||
+ | <p> | ||
+ | It is a {this.state.color} | ||
+ | {this.state.model} | ||
+ | from {this.state.year}. | ||
+ | </p> | ||
+ | <button | ||
+ | type="button" | ||
+ | onClick={this.changeColor} | ||
+ | >Change color</button> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | = Eventos = | ||
+ | |||
+ | Assim como no HTML, o React pode efetuar ações baseadas nos eventos dos usuários, tais como click, change, mouseover, etc.. | ||
+ | |||
+ | No React, para adicionar um evento, colocamos o nome da função que queremos chamar entre chaves (<code>onClick={shoot}</code>) ao invés de chamada de função (<code>onClick="shoot()"</code>). | ||
+ | |||
+ | Como boa prática de programação no React, é interessante colocar o tratamento do evento como um método em uma classe componente. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Football extends React.Component { | ||
+ | shoot = () => { | ||
+ | alert(this); | ||
+ | /* | ||
+ | The 'this' keyword refers to the component object | ||
+ | */ | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <button onClick={this.shoot}>Take the shot!</button> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ReactDOM.render(<Football />, document.getElementById('root')); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Observe no exemplo acima que também podemos usar o this para pegar uma função do objeto ou atibuto. | ||
+ | |||
+ | Podemos também passar parâmetros. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Football extends React.Component { | ||
+ | shoot = (a) => { | ||
+ | alert(a); | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <button onClick={() => this.shoot("Goal")}>Take the shot!</button> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ReactDOM.render(<Football />, document.getElementById('root')); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Eventos de Objetos React === | ||
+ | |||
+ | Podemos pegar os eventos no React. No exemplo a seguir, estamos pegando o evento "click" do mouse. Veja que estamos usando a sintaxe de ''arrow function''. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Football extends React.Component { | ||
+ | shoot = (a, b) => { | ||
+ | alert(b.type); | ||
+ | /* | ||
+ | 'b' representa o evento React que chamou a função, | ||
+ | nesse caso foi o evento 'click'. | ||
+ | */ | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <button onClick={(ev) => this.shoot("Goal", ev)}>Take the shot!</button> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ReactDOM.render(<Football />, document.getElementById('root')); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Sem o uso de ''arrow function'', o objeto event do React é enviado automaticamente como um último parâmetro ao usar o método <code>bind()</code>. | ||
+ | |||
+ | <syntaxhighlight lang=javascript> | ||
+ | class Football extends React.Component { | ||
+ | shoot = (a, b) => { | ||
+ | alert(b.type); | ||
+ | /* | ||
+ | 'b' represents the React event that triggered the function, | ||
+ | in this case the 'click' event | ||
+ | */ | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <button onClick={this.shoot.bind(this, "Goal")}>Take the shot!</button> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ReactDOM.render(<Football />, document.getElementById('root')); | ||
+ | </syntaxhighlight> |
Edição das 13h29min de 27 de fevereiro de 2024
Afluentes: Desenvolvimento Front-end, Usabilidade, desenvolvimento web, mobile e jogos
State React
O objeto state
é onde são armazenados valores de propriedades pertencentes ao componente. Quando modificado, há uma nova renderização do componente. Ele é inicializado no construtor.
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
render() {
return (
<div>
<h1>My Car</h1>
</div>
);
}
}
Podemos referenciar o objet state
de qualquer lugar do componente usando this.state.nome_da_propriedade
.
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
render() {
return (
<div>
<h1>My {this.state.brand}</h1>
<p>
It is a {this.state.color}
{this.state.model}
from {this.state.year}.
</p>
</div>
);
}
}
Para modificar o objeto state
, usamos o método this.setState()
.
No exemplo a seguir, um botão usa o evento onClick
que modifica a propriedade da cor.
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
changeColor = () => {
this.setState({color: "blue"});
}
render() {
return (
<div>
<h1>My {this.state.brand}</h1>
<p>
It is a {this.state.color}
{this.state.model}
from {this.state.year}.
</p>
<button
type="button"
onClick={this.changeColor}
>Change color</button>
</div>
);
}
}
Eventos
Assim como no HTML, o React pode efetuar ações baseadas nos eventos dos usuários, tais como click, change, mouseover, etc..
No React, para adicionar um evento, colocamos o nome da função que queremos chamar entre chaves (onClick={shoot}
) ao invés de chamada de função (onClick="shoot()"
).
Como boa prática de programação no React, é interessante colocar o tratamento do evento como um método em uma classe componente.
class Football extends React.Component {
shoot = () => {
alert(this);
/*
The 'this' keyword refers to the component object
*/
}
render() {
return (
<button onClick={this.shoot}>Take the shot!</button>
);
}
}
ReactDOM.render(<Football />, document.getElementById('root'));
Observe no exemplo acima que também podemos usar o this para pegar uma função do objeto ou atibuto.
Podemos também passar parâmetros.
class Football extends React.Component {
shoot = (a) => {
alert(a);
}
render() {
return (
<button onClick={() => this.shoot("Goal")}>Take the shot!</button>
);
}
}
ReactDOM.render(<Football />, document.getElementById('root'));
Eventos de Objetos React
Podemos pegar os eventos no React. No exemplo a seguir, estamos pegando o evento "click" do mouse. Veja que estamos usando a sintaxe de arrow function.
class Football extends React.Component {
shoot = (a, b) => {
alert(b.type);
/*
'b' representa o evento React que chamou a função,
nesse caso foi o evento 'click'.
*/
}
render() {
return (
<button onClick={(ev) => this.shoot("Goal", ev)}>Take the shot!</button>
);
}
}
ReactDOM.render(<Football />, document.getElementById('root'));
Sem o uso de arrow function, o objeto event do React é enviado automaticamente como um último parâmetro ao usar o método bind()
.
class Football extends React.Component {
shoot = (a, b) => {
alert(b.type);
/*
'b' represents the React event that triggered the function,
in this case the 'click' event
*/
}
render() {
return (
<button onClick={this.shoot.bind(this, "Goal")}>Take the shot!</button>
);
}
}
ReactDOM.render(<Football />, document.getElementById('root'));