- React Cookbook
- Carlos Santana Roldan
- 363字
- 2021-07-16 17:49:41
How to do it…
We will create a component where we will sum all the numbers entered in an input. We can take some of the last recipes to start from there:
- The first thing we will do is to modify our App.js and include the Numbers component:
import React, { Component } from 'react';
import Numbers from './Numbers/Numbers';
import Header from '../shared/components/layout/Header';
import Content from '../shared/components/layout/Content';
import Footer from '../shared/components/layout/Footer';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<Header title="Understanding Pure Components" />
<Content>
<Numbers />
</Content>
<Footer />
</div>
);
}
}
export default App;
File: src/components/App.js
- Now we will create the Numbers component:
// Dependencies
import React, { Component } from 'react';
// Components
import Result from './Result';
// Styles
import './Numbers.css';
class Numbers extends Component {
state = {
numbers: '', // Here we will save the input value
results: [] // In this state we will save the results of the sums
};
handleNumberChange = e => {
const { target: { value } } = e;
// Converting the string value to array
// "12345" => ["1", "2", "3", "4", "5"]
const numbers = Array.from(value);
// Summing all numbers from the array
// ["1", "2", "3", "4", "5"] => 15
const result = numbers.reduce((a, b) => Number(a) + Number(b), 0);
// Updating the local state
this.setState({
numbers: value,
results: [...this.state.results, result]
});
}
render() {
return (
<div className="Numbers">
<input
type="number"
value={this.state.numbers}
onChange={this.handleNumberChange}
/>
{/* Rendering the results array */}
<ul>
{this.state.results.map((result, i) => (
<Result key={i} result={result} />
))}
</ul>
</div>
)
}
}
export default Numbers;
File: src/components/Numbers/Numbers.js
- Then, let's create the Result component (as a Class Component):
import React, { Component } from 'react';
class Result extends Component {
render() {
return <li>{this.props.result}</li>;
}
}
export default Result;
File: src/components/Numbers/Result.js
- Finally, the styles:
.Numbers {
padding: 30px;
}
.Numbers input[type=number]::-webkit-inner-spin-button,
.Numbers input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
.Numbers input {
width: 500px;
height: 60px;
font-size: 20px;
outline: none;
border: 1px solid #ccc;
padding: 10px;
}
.Numbers ul {
margin: 0 auto;
padding: 0;
list-style: none;
width: 522px;
}
.Numbers ul li {
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
padding: 10px;
}
.Numbers ul li:first-child {
border-top: none;
}
.Numbers ul li:last-child {
border-bottom: 1px solid #ccc;
}
File: src/components/Numbers/Numbers.css
推薦閱讀
- Spring Boot 2.0 Projects
- 信息通信網絡建設安全管理概要2
- HTML5 Game development with ImpactJS
- Go Web Scraping Quick Start Guide
- 通信簡史:從信鴿到6G+
- 計算機網絡工程實用教程(第2版)
- 中小型局域網組建、管理與維護實戰
- Mastering Dart
- 網絡環境中基于用戶視角的信息質量評價研究
- Echo Quick Start Guide
- TD-LTE無線網絡規劃與設計
- 紅藍攻防:構建實戰化網絡安全防御體系
- 全聯網標識服務
- Building RESTful Web Services with .NET Core
- 智能物聯網:區塊鏈與霧計算融合應用詳解