ReactでFizzBuzz
11923 ワード
こんにちは。
無性にFizzBuzzしたくなる時ってありますよね?(僕はあります)
今回は、Reactで良く見かけるカウントアップのサンプルを弄って作っていきます。
準備
-
create-react-app
でポチポチやっていきます。
npm i create-react-app -g
create-react-app ts-react-fizzbuzz --typescript
実装
- 以下のファイルを書き換えます。
src\App.tsx
import React, { Component } from 'react';
import './App.css';
interface IProps {}
interface IState {
count: number;
fizzBuzz: string;
}
class App extends Component<IProps, IState> {
constructor(props: IProps) {
super(props);
this.state = {
count: 1,
fizzBuzz: this.toFizzBuzz(1)
};
this.countUp = this.countUp.bind(this);
this.countDown = this.countDown.bind(this);
}
toFizzBuzz(value: number): string {
if (value <= 0) {
return '';
}
const fizzBuzz: string =
`${value % 3 === 0 ? 'Fizz' : ''}${value % 5 === 0 ? 'Buzz' : ''}` ||
value.toString();
return fizzBuzz;
}
countUp() {
const value = this.state.count + 1;
this.setState({
count: value,
fizzBuzz: this.toFizzBuzz(value)
});
}
countDown() {
const value = this.state.count === 1 ? 1 : this.state.count - 1;
this.setState({
count: value,
fizzBuzz: this.toFizzBuzz(value)
});
}
render() {
return (
<div>
<div className="count">{this.state.fizzBuzz}</div>
<input type="button" value="+" onClick={this.countUp} />
<input type="button" value="-" onClick={this.countDown} />
</div>
);
}
}
export default App;
src\App.css
#root {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
.count {
margin-bottom: 10px;
font-size: 200px;
}
input[type='button'] {
margin: 10px;
width: 50px;
font-size: 50px;
}
実行
npm run start
結果確認
良いですね。
ソースコード
Author And Source
この問題について(ReactでFizzBuzz), 我々は、より多くの情報をここで見つけました https://qiita.com/obuchi3/items/6f939be7055c6d9cf1f6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .