react快速上手

2022-08-21 11:23:31 浏览数 (1)

今天想简单玩玩React,我们打开React官方文档:

https://react.docschina.org/

点击入门教程

通过简单的介绍后,我们开始代码编写

打开提供的在线初始代码(我们之后再搭建本地开发环境来完成这个游戏,今天暂时只做一个简单入门):

https://codepen.io/gaearon/pen/oWWQNa?editors=0010

打开codepen提供的在线编辑器,看到初始代码后,我们可以开始尝试编写

注意看文档,这里三个React组件Square正方形、Board画板以及Game游戏

看到代码中的结构为主入口:

代码语言:javascript复制
// ========================================

ReactDOM.render(
  <Game />,
  document.getElementById('root')
);

其中通过root这个id绑定了一个节点,包含了一个Game组件

代码语言:javascript复制
class Game extends React.Component {
  render() {
    return (
      <div className="game">
        <div className="game-board">
          <Board />
        </div>
        <div className="game-info">
          <div>{/* status */}</div>
          <ol>{/* TODO */}</ol>
        </div>
      </div>
    );
  }
}

这个Game组件又包含了Board画板组件

代码语言:javascript复制
class Board extends React.Component {
  renderSquare(i) {
    return <Square />;
  }

  render() {
    const status = 'Next player: X';

    return (
      <div>
        <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>
    );
  }
}

画板Board组件中的外部div包含了四个div分别是显示井字棋玩家状态(下次落子为X还是O),这里用{status}获取到了上面申明的变量status

然后是三个classNameboard-rowdiv,其中每一个div又包含了三个Square组件:

代码语言:javascript复制
class Square extends React.Component {
  render() {
    return (
      <button className="square">
        {/* TODO */}
      </button>
    );
  }
}

Square正方形组件包含了一个button标签,最后形成的效果就是一个状态,九个按钮:

然后我们可以开始修改代码了

首先是在Board中给Square组件传入一个value

代码语言:javascript复制
class Board extends React.Component {
  renderSquare(i) {
    return <Square value={i} />;
  }    
...
}

然后再到Square中渲染出来这个value

代码语言:javascript复制
class Square extends React.Component {
  render() {
    return (
      <button className="square">
        {this.props.value}
      </button>
    );
  }
}

修改完我们的代码,很快就渲染生效了,可以看到数字渲染了出来

我们在给每个Square中的button添加一个点击事件:

代码语言:javascript复制
class Square extends React.Component {
  render() {
    return (
      <button className="square" onClick={function() { alert('click'); }}>
        {this.props.value}
      </button>
    );
  }
}

添加完成后我们再次点击,可以看到弹出了弹框

我们接下来给Square新增一个状态state,让它可以实现我们的点击前为空,点击后渲染

代码语言:javascript复制
class Square extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      value: null,
    };
  }
  
  render() {
    return (
      <button
        className="square"
        onClick={() => this.setState({value: 'X'})}
      >
        {this.state.value}
      </button>
    );
  }
}

现在我们每点击一次,就可以留下一个X作为标记啦

之后我们在完成剩下的部分吧~

0 人点赞