This article is sponsored by Flutterwave - Flutterwave is the easiest way to make and accept payments both online and offline from customers anywhere in the world. It is absolutely free!
The state is managed in a class-based component. Although the functional component, with the props property, will be a template-like component to accept data from the class component in a separate file.
State property is used in a class component to detect changes when an event is fired. Such a component is called a stateful component or smart component
See the example below:
Person/Person.js
import React from 'react';
const Person = props => {
return (
<div className="App">
<h3>Name: {props.name}</h3>
<h3>Skill: {props.language}</h3>
<h3>ID: {props.id}</h3>
</div>
);
};
export default Person;
This was what we had in the article, React Props and State.
index.css
body {
background-color: #f0f0f0;
}
App.css
.App {
margin: 20px auto;
padding: 5px;
border: 1px solid #ccc;
border-radius: 4px;
line-height: 1.7;
width: 12.375rem;
font-family: sans-serif;
background-color: #fff;
}
.App:hover {
box-shadow: 0 1px 2px 3px #eee;
transform: scale(1.01);
}
button {
display: block;
margin: 0 auto;
padding: 10px;
background-color: #fff;
}
App.js
import React from 'react';
import { Component } from 'react';
import './App.css';
import Person from './Person/Person';
class App extends Component {
state = {
person: [
{ name: 'Bello', language: 'React' },
{ name: 'Michael', language: 'Vue' },
{ name: 'Mary', language: 'Angular' }
]
};
render() {
return (
<div>
<Person name={this.state.person[0].name}
language={this.state.person[0].language} />
<Person name={this.state.person[1].name}
language={this.state.person[1].language} />
<Person name={this.state.person[2].name}
language={this.state.person[2].language} />
</div>
);
}
}
export default App;
We've been hard coding so far, but what if we want changes in the DOM only when an event is fired. Let's modify the above code to allow the state property Person object values to change upon a click.
App.js
import React from 'react';
import { Component } from 'react';
import './App.css';
import Person from './Person/Person';
class App extends Component {
state = {
persons: [
{ name: 'Bello', language: 'React', id: '2sdr3' },
{ name: 'Michael', language: 'Vue', id: 'de6c3' },
{ name: 'Mary', language: 'Angular', id: 'c1z3x' }
]
};
personHandler = () => {
this.setState({
persons: [
{ name: 'Andela', language: 'Ember', id: '2sdr3' },
{ name: 'John', language: 'Backbone', id: 'de6c3' },
{ name: 'Mary', language: 'Angular', id: 'c1z3x' }
]
})
};
render() {
return (
<div>
<Person
name={this.state.persons[0].name}
language={this.state.persons[0].language}
id={this.state.persons[0].id} />
<Person
name={this.state.persons[1].name}
language={this.state.persons[1].language}
id={this.state.persons[1].id} />
<Person
name={this.state.persons[2].name}
language={this.state.persons[2].language}
id={this.state.persons[2].id} />
<button
onClick={this.personHandler}>Change Person State</button>
</div>
);
}
}
export default App;
In the code snippet above, the state
property holds the current Person object values in the class. Also, when React
and { Component }
object were imported from the react
module, we had access to a couple of methods like the setState()
method. The set state method is responsible for overriding the Person object in the state whenever an event is fired, like clicking a button. That is, it updates the DOM upon a click. Hence the attribute, onClick={this.personHandler}
to reach out to the setState()
object when a click is successful.
Also, because we need to update the DOM upon a click of a button, the personHandler
is a function within which is the setState
method.
Since React uses the camelCase naming convention, the React elements attribute onClick
is used instead of the onclick
event type in Vanilla JavaScript.
More of React State Handling in the next article
Happy Coding!!!
Techstack | Flutterwave
Techstack article, sponsored by Flutterwave. Flutterwave is the easiest way to make and accept payments both online and offline from customers anywhere in the world. It is absolutely free! Also, you get a Flutterwave dollar barter card when you signup. Open an online store and take your business anywhere in the world.
Support what I do and push me to keep making free content.