• reactjs官方demo


    import React from "react";
    import ReactDom from "react-dom";
    import "./index.css";
    
    // class Square extends React.Component {
    //     render() {
    //         return (
    //             <button className="square"
    //                     onClick={() => this.props.onClick()}>
    //                 {this.props.value}
    //             </button>
    //         );
    //     }
    // }
    // 在 React 中,有一个命名规范,通常会将代表事件的监听 prop 命名为 on[Event],将处理事件的监听方法命名为 handle[Event] 这样的格式。
    function Square(props) {
        //如果组件只有render方法,并且不包含state,那么我们可以使用函数组件
        //我们把两个 this.props 都替换成了 props。
        return (
            <button className="square" onClick={props.onClick}>
                {props.value}
            </button>
        )
    
    }
    
    class Board extends React.Component {
        //构造函数初始化state,定义了它之后后面的props就可以改为state了。提升到game组件记录history
        // constructor(props) {
        //     super(props);
        //     this.state = {
        //         squares: Array(9).fill(null),
        //         xIsNext: true,
        //     };
        // }
    
    
        //定义renderSquare方法传入参数i
        renderSquare(i) {
            // 传递一个名为 value 的 prop 到 Square 当中
            return <Square value={this.props.squares[i]}
                           onClick={() => this.props.onClick(i)}
            />;
        }
    
        render() {
            //下一次轮到谁
            // const status = "Next Player:" + (this.state.xIsNext ? 'X' : '0');
            return (
                <div>
                    {/*由于 Game 组件渲染了游戏的状态,因此我们可以将 Board 组件 render 方法中对应的代码移除。*/}
                    {/*<div className="status">{status}</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),
                    }],
                stepNumber: 0,
                xIsNext: true,
            };
        }
    
        jumpTo(step) {
            this.setState({
                stepNumber: step,
                xIsNext: (step % 2) === 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,
            });
        }
    
        render() {
            const history = this.state.history;
            const current = history[this.state.stepNumber];
            const winner = calculateWinner(current.squares);
            const moves = history.map((step, move) => {
                const desc = move ?
                    "Go to move #" + move :
                    'Got to game start';
                return (
                    <li key={move}>
                        <button onClick={() => this.jumpTo(move)}>{desc}</button>
                    </li>
                );
    
            });
            let status;
            if (winner) {
                status = "Winner:" + winner;
            } else {
                status = "Next Player:" + (this.state.xIsNext ? 'X' : '0');
            }
    
            return (
                <div className="game">
                    <div className="game-board">
                        <Board
                            squares={current.squares}
                            onClick={(i) => this.handleClick(i)}
                        />
                    </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;
    }
    
  • 相关阅读:
    drf 之 JWT认证 什么是集群以及分布式 什么是正向代理,什么是反向代理
    drf 之自定制过滤器 分页器(三种)如何使用(重点) 全局异常 封装Response对象 自动生成接口文档
    课堂练习之“寻找最长单词链”
    《人月神话》读书笔记(三)
    用户体验
    第十四周进度报告
    课堂练习之“寻找水王”
    《人月神话》读书笔记(二)
    第二阶段冲刺(十)
    第二阶段冲刺(九)
  • 原文地址:https://www.cnblogs.com/c-x-a/p/13177975.html
Copyright © 2020-2023  润新知