はじめに
こんにちわ、swim-loverです。 初心者向けのWebアプリ開発記事です。フロントエンド環境にReact.jsを使用しています。今の目標は、出席簿アプリを作ることです。
第4回は、 Boardクラスでの変数State管理、イベントハンドラによるSquareクラスからのBoardクラス変数stateの更新を行いました。
今回も引き続き ‘CodePen’に保存したProject 三つ並べゲーム ‘My Tic Tac Toy’のサンプルを使って、勉強したいと思います。
React Code “Squreクラスを関数へ変更する”
今回も、チュートリアルに従いすすめます。これまでコードをいじってきたSqureクラスを捨てて、Squre関数に変更します。よりシンプルに実装できることが理由とのことです。
せっかく作ったSqureクラスを消すのは惜しい気もしますので、Squreクラスはそのままにして、関数の方をSqure_fとして進めたいと思います。
・Squreクラス
class Square extends React.Component {
render() {
return (
<button
className="square"
onClick={() => this.props.onClick()}>{this.props.value}
</button>
);
}
}
・Squre_f関数
関数の引数が、”props”になっています。propsは、onClick()時のハンドラとvalueの二つのパラメータを渡すように見えます。
function Square_f(props) {
return (
<button className="square" onClick={props.onClick}>
{props.value}
</button>
);
}
React Code “先手”X”と後手”O”の実装”
現時点では、盤面をクリックしたら、常に”X”を表示しています。交互に”X”と”O”を表示しないとゲームにはなりません。
まずは、先手を”X”と決めてしまします。
Boardクラスに、つぎの表示文字を決める変数xIsNextを新設し、初期値をTrueとします。
class Board extends React.Component {
constructor(props) { //constructor
super(props); //call super class
this.state = { //init state val
squares: Array(9).fill(null),
xIsNext: true, //boolean data
};
}
renderSqure()メソッドからsqure_f()関数を呼ぶように書き換えます。
renderSquare(i) {
return( <Square_f
value={this.state.squares[i]}
onClick={() => this.handleClick(i)}
/>);
}
つぎに、マウスクリック時のハンドラ handleClick()を書き換えます。
xIsNextがTrueであれば、”X”をFalseであれば、”O”をsquares[i]に格納します。
そして、xIsNextを現在の値を反転させます。
handleClick(i) {
const squares = this.state.squares.slice();
//squares[i] = 'X';
squares[i] = this.state.xIsNext ? 'X' : 'O'; //set data 'X' or 'O'
this.setState({
squares: squares,
xIsNext: !this.state.xIsNext, //turn flag value
});
}
render()処理も、次の順番が”X”か”O”かを示すように書き換えます。
render() {
// const status = 'Next player: X';
const status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');
先手”X”と後手”O”が交互に表示されるようになりました。
また、つぎの順番も”Next Player”として表示されるようになりました。
まとめ
今回、SqureクラスからSqure_f()関数への切り替え、先手”X”と後手”O”の表示切替を実装しました。
引き続き、Reactの勉強を進めたいと思います。
組み込み系ソフトエンジニアをしています。これまでフロントエンド技術は避けてきましたが、食わず嫌いをやめて、勉強を始めました。
趣味は、水泳、ロードバイク、ランニング、登山です。
組み込み系技術ネタ、勉強したフロントエンド技術、たまに趣味の運動について発信していきます。
どうぞよろしくお願いします。
コメント