React官方Tic Tac Toe教程改進

只列舉前三個,主要是網上許多改進版的第一個座標寫的都及其複雜,這裏出個簡化版的。
在這裏插入圖片描述

1、在遊戲歷史記錄列表顯示每一步棋的座標,格式爲 (列號, 行號)

  export class Game extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            history: [{
                squares: Array(9).fill(null),
                x: 0,     // 行號
                y: 0,     // 列號
            }],
            xIsNext: true,
            stepNumber: 0,
        }
    }


   handleClick(i) {
        // 省略官方代碼
        this.setState({
            history: history.concat([{
                squares: squares,
                x: Math.floor(i / 3),          // 行號
                y: i % 3                       // 列號
            }]),
            stepNumber: history.length,
            xIsNext: !this.state.xIsNext,
        });
   }
    // 省略官方代碼
  render() {
     // 省略官方代碼
     return (
		  <li key={move}>
		    <button onClick={() => this.jumpTo(move)} className={bold}>{desc},座標({step.x + 1}:{step.y + 1})</button>
		  </li>
		);
    // 省略官方代碼
  }
}

2、在歷史記錄列表中加粗顯示當前選擇的項目

 render() {
     // 省略官方代碼
      const desc = move ?
                'Go to move #' + move :
                'Go to game start';
     const bold = this.state.stepNumber === move ? 'bold' : '';
     return (
		  <li key={move}>
		    <button onClick={() => this.jumpTo(move)} className={bold}>{desc},座標({step.x + 1}:{step.y + 1})</button>
		  </li>
		);
     // 省略官方代碼

css:

.bold {
  font-weight: bold;
}

3 、使用兩個循環來渲染出棋盤的格子,而不是在代碼裏寫死(hardcode)

class Board extends React.Component {
renderSquare(i) {
    return <Square
            value={this.props.squares[i]}
            onClick={() => this.props.onClick(i)}
            key={i}
           />;
    }
    render() {
        return (
            <div>
                    {Array(3).fill(null).map((item1,i) => {
                        return (<div className="board-row" key={i}>
                            {Array(3).fill(null).map((item2,j) => {
                                return this.renderSquare(3 * i + j)
                            })}
                        </div>)
                    })}
            </div>
        )
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章