这是一篇记录,把 React 的官网的入门教程过一遍,这个项目非常好,官网最后没有贴出最终的代码,我把最后操作成功的代码贴下来了,可以多看看琢磨。
一、React 代码
import React from 'react'import ReactDOM from 'react-dom'import './index.css'function Square(props) {return (<button className="square" onClick={props.onClick}>{props.value}</button>)}class Board extends React.Component {renderSquare(i) {return (<Squarevalue={this.props.squares[i]}onClick={() => {this.props.onClick(i)}}/>)}render() {return (<div><div className="board-row">{this.renderSquare(0)}{this.renderSquare(1)}{this.renderSquare(2)}</div><div className="board-row">{this.renderSquare(3)}{this.renderSquare(4)}{this.renderSquare(5)}</div><div className="board-row">{this.renderSquare(6)}{this.renderSquare(7)}{this.renderSquare(8)}</div></div>)}}class Game extends React.Component {constructor(props) {super(props)this.state = {history: [{squares: Array(9).fill(null)}],xIsNext: true,stepNumber: 0}}handleClick(i) {const history = this.state.history.slice(0, this.state.stepNumber + 1)const current = history[history.length - 1]const squares = current.squares.slice()if (calculateWinner(squares) || squares[i]) {return}squares[i] = this.state.xIsNext ? 'X' : 'O'this.setState({history: history.concat([{squares: squares}]),stepNumber: history.length,xIsNext: !this.state.xIsNext})}jumpTo(step) {this.setState({stepNumber: step,xIsNext: step % 2 === 0})}render() {const history = this.state.historyconst current = history[this.state.stepNumber]const winner = calculateWinner(current.squares)const moves = history.map((step, move) => {const desc = move ? 'Go to move #' + move : 'Go to game start'return (<li key={move}><button onClick={() => this.jumpTo(move)}>{desc}</button></li>)})let statusif (winner) {status = 'Winner' + winner} else {status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O')}return (<div className="game"><div className="game-board"><BoardonClick={(i) => {this.handleClick(i)}}squares={current.squares}/></div><div className="game-info"><div>{status}</div><ol>{moves}</ol></div></div>)}}// ========================================ReactDOM.render(<Game/>, document.getElementById('root'))function calculateWinner(squares) {const lines = [[0, 1, 2],[3, 4, 5],[6, 7, 8],[0, 3, 6],[1, 4, 7],[2, 5, 8],[0, 4, 8],[2, 4, 6]]for (let i = 0; i < lines.length; i++) {const [a, b, c] = lines[i]if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {return squares[a]}}return null}
二、参考链接
认识 React:https://react.docschina.org/tutorial/tutorial.html#making-an-interactive-component
