前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >react快速上手

react快速上手

作者头像
阿超
发布2022-08-21 11:23:31
2890
发布2022-08-21 11:23:31
举报
文章被收录于专栏:快乐阿超快乐阿超

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

https://react.docschina.org/

点击入门教程

image-20220216210416773
image-20220216210416773

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

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

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标签,最后形成的效果就是一个状态,九个按钮:

image-20220216213416147
image-20220216213416147

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

首先是在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>
    );
  }
}

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

image-20220216213947991
image-20220216213947991

我们在给每个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作为标记啦

image-20220216215314980
image-20220216215314980

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档