SOURCE

console 命令行工具 X clear

                    
>
console
class App extends React.Component {
    constructor() {
        super()
        this.state = {
            result1: 0,
            result2: 2
        }
        this.t0 = new Date()
    }
    success1(x) {
        console.log(x)
        console.log('兔子跑完了,用时')
        let r1 = new Date() - this.t0
        this.setState({
            result1: r1
        })
    }
    success2(x) {
        console.log(x)
        console.log('乌龟跑完了,用时')
        let r2 = new Date() - this.t0
        this.setState({
            result2: r2
        })
    }
    render() {
        return (
            <div>
                <div class="header">
                    <Time1 result={this.state.result1} />
        <Judge />
                    <Time2 result={this.state.result2} />
                </div>
                <Playground success1={this.success1.bind(this)}
                    success2={this.success2.bind(this)} />
            </div>
        )
    }
}
function Time1(props) {
    return (
        <div>
            <h2>兔子用时</h2>
            <div>{props.result}</div>
        </div>
    )
}
function Time2(props) {
    return (
        <div>
            <h2>乌龟用时</h2>
            <div>{props.result}</div>
        </div>
    )
}
function Judge() {
    return (
        <div>裁判</div>
    )
}
function Playground(props) {
    let success1 = props.success1
    let success2 = props.success2
    return (
        <div class="playground">
            <Track1 success={success1} />
            <Track2 success={success2} />
        </div>
    )
}


class Track1 extends React.Component {
    constructor() {
        super()
        let n = 0
        this.state = {
            style: {
                transform: `translateX(${n}%)`
            }
        }
        let timerId = setInterval(() => {
            n += 25
            this.setState({
                style: {
                    transform: `translateX(${n}%)`
                }
            })
            if (n >= 100) {
                window.clearInterval(timerId)
                this.props.success('我是小兔兔')
            }
        }, 1000)
    }

    render() {
        return (
            <div>
                <div class="player" style={this.state.style}>兔子</div>
                <div class="track"></div>
            </div>
        )
    }
}

class Track2 extends React.Component {
    constructor() {
        super()
        let n = 0
        this.state = {
            style: {
                transform: `translateX(${n}%)`
            }
        }
        let timerId = setInterval(() => {
            n += 20
            this.setState({
                style: {
                    transform: `translateX(${n}%)`
                }
            })
            if (n >= 100) {
                window.clearInterval(timerId)
                this.props.success('我是小龟龟')

            }
        }, 1000)
    }

    render() {
        return (
            <div>
                <div class="player" style={this.state.style}>乌龟</div>
                <div class="track"></div>
            </div>
        )
    }
}
ReactDOM.render(<App></App>, document.querySelector('#root'))
<script src="https://cdn.bootcss.com/react/16.8.6/umd/react.production.min.js"></script>
  <script src="https://cdn.bootcss.com/react-dom/16.8.6/umd/react-dom.production.min.js"></script>

<div id="root"></div>
.header{
  display: flex;
  justify-content: center;
}

.track{
  border-bottom: 1px solid black;
}

*{margin:0;padding: 0; box-sizing: border-box;}

.playground{
  border: 1px solid black;
  background: green;
}

body{
  padding: 40px;
}