/** * Web唐明明 * 匆匆数载恍如梦,岁月迢迢华发增。 * 碌碌无为枉半生,一朝惊醒万事空。 * ComponentName: '官方demo - 组件之间的传参' */ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; // 类组件 // class Square extends React.Component { // // 入口函数 // render() { // return ( // // ); // } // } // 函数组件 const Square = (props) => { return ( ) } class Board extends React.Component { // 小方格方法 renderSquare(i) { return this.props.onBoard(i)} />; } render() { return (
{this.renderSquare(0)} {this.renderSquare(1)} {this.renderSquare(2)}
{this.renderSquare(3)} {this.renderSquare(4)} {this.renderSquare(5)}
{this.renderSquare(6)} {this.renderSquare(7)} {this.renderSquare(8)}
); } } class Game extends React.Component { constructor (props) { super(props) this.state = { history: [{ squares: Array(9).fill(null) }], xIsNext: true, stepIndex: 0 } } // 定一个一个组件方法 handleClick(i) { const history = this.state.history.slice(0, this.state.stepIndex + 1) const current = history[history.length - 1] const squares = current.squares.slice() if(calculateWinner(squares) || squares[i]){ return } squares[i] = this.state.xInNext ? 'X': 'O' this.setState({ history: history.concat([{ squares }]), xInNext: !this.state.xInNext, stepIndex: history.length }) // Array.slice()返回数组选定的元素,相当于克隆了原有数组 } jumpTo(index){ this.setState({ stepIndex: index, xIsNext: (index % 2) === 0, }) } render() { const history = this.state.history const current = history[this.state.stepIndex] const winner = calculateWinner(current.squares) const moves = history.map((stepArr, index) => { const desc = index ? '下一步' + index : '开始游戏' return(
  • ) }) let status; if(winner){ status = '恭喜选手' + winner + '获胜~' }else{ status = '下一位选手: ' + (this.state.xInNext ? 'X': 'O'); } return (
    this.handleClick(i)} />
    {status}
      {moves}
    ); } } 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; } ReactDOM.render( , document.getElementById('root') );