In this tutorial we will show you how to combine components to make
the app easier to maintain. This approach will allow you to update and
change your components without affecting the rest of the page.
Stateless Example
Our first component in example below is
App. This component is owner of
Header and
Content. We are creating
Header and
Content separately and just adding it inside JSX tree in our
App component. Only
App component needs to be exported.
App.jsx
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<Header/>
<Content/>
</div>
);
}
}
class Header extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
</div>
);
}
}
class Content extends React.Component {
render() {
return (
<div>
<h2>Content</h2>
<p>The content text!!!</p>
</div>
);
}
}
export default App;
To be able to render this on page, we need to import it in
main.js file and call
reactDOM.render(). We already did it when we were setting environment.
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App />, document.getElementById('app'));
Above code will generate following result:
Stateful Example
In this example we will set the state for owner component (
App). The
Header component is just added like in the last example since it doesn't need any state. Instead of content tag, we are creating
table and
tbody elements where we will dynamically insert
TableRow for every object from the
data array. You can see that we are using EcmaScript 2015 arrow syntax (
⇒)
which looks much cleaner then the old JavaScript syntax. This will help
us create our elements with fewer lines of code. It is especially
useful when you need to create list with a lot of items.
App.jsx
import React from 'react';
class App extends React.Component {
constructor() {
super();
this.state = {
data:
[
{
"id":1,
"name":"Foo",
"age":"20"
},
{
"id":2,
"name":"Bar",
"age":"30"
},
{
"id":3,
"name":"Baz",
"age":"40"
}
]
}
}
render() {
return (
<div>
<Header/>
<table>
<tbody>
{this.state.data.map((person, i) => <TableRow key = {i} data = {person} />)}
</tbody>
</table>
</div>
);
}
}
class Header extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
</div>
);
}
}
class TableRow extends React.Component {
render() {
return (
<tr>
<td>{this.props.data.id}</td>
<td>{this.props.data.name}</td>
<td>{this.props.data.age}</td>
</tr>
);
}
}
export default App;
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/>, document.getElementById('app'));
NOTE
Notice that we are using
key = {i} inside
map()
function. This will help React to update only necessary elements instead
of re-rendering entire list when something change. It is huge
performance boost for larger number of dynamically created elements.

No comments:
Post a Comment