React三子棋教程后续练习

2023-10-30

1. 在游戏历史记录列表显示每一步棋的坐标,格式为 (列号, 行号)。

game.state.history中不仅需要记录棋盘,还需要记录此步落子的坐标

class Game extends React.Component {
   
  // 修改Game构造函数中的history
  constructor(props) {
   
    super(props)
    this.state = {
   
      history: [{
   
        squares: Array(9).fill(null),
        stepIndex: null, // 增加这一行
      }],
      xIsNext: true,
      stepNumber: 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,
        stepIndex: i, // 增加这一行
      }]),
      stepNumber: history.length,
      xIsNext: !this.state.xIsNext,
    })
  }
}

之后写一个函数式组件,用来展示棋子的坐标

function StepSpan(props){
   
  const stepIndex = props.stepIndex
  if(stepIndex !== null){
   
    return (
      <span>row:{
   Math.floor(stepIndex/3) + 1}|col:{
   stepIndex % 3 + 1}</span>
    );
  }
  else{
   
    return null
  }
}

再修改Game的render方法中的moves

    const moves = history.map((step, move) => {
   
      const desc = move ?
        'Go to move #' + move :
        'Go to game start';
      return (
        <li key={
   move}>
          <button onClick={
   () => this.jumpTo(move)}>{
   desc}</button>
          <StepSpan stepIndex={
   step.stepIndex} ></StepSpan> // 增加这行
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React三子棋教程后续练习 的相关文章

  • D3D资源管理

    摘要 受管贴图 Managed textures 也就是我们通常所谓的 自动管理贴图 在DX6中首次被引入 经过一系列的改进和增强 在DX9中自动管理的资源类型增加到贴图 顶点缓冲 顶点索引缓冲 所有这些资源使用统一的公共接口 通过使用D3
  • 【图文分析】Java经典基础练习题(六):猴子吃桃子问题

    文章目录 一 具体题目 二 思路分析 逆向思维 三 代码 结果 代码 结果 四 彩蛋 一 具体题目 猴子第一天摘下若干个桃子 当即吃了一半 还不瘾 又多吃了一个 第二天 早上又将剩下的桃子吃掉一半 又多吃了一个 以后每天早上都吃了前一天剩下

随机推荐

  • Webpack4 配置 Externals

    Externals 配置项用来告诉 Webpack 要构建的代码中使用了哪些不用被打包的模块 也就是说这些模版是外部环境提供的 Webpack 在打包时可以忽略它们 1 有些 JavaScript 运行环境可能内置了一些全局变量或者模块 例
  • 新手小白学Java

    刚开始学习java的时候 可能是一头雾水 不知道从何学起 还有很多Java小白 在刚自学Java的时候玩命的学习 玩命的记住Java原理 天天早上五点起床背Java的一些英文词汇 然后遇见一些未知的困难 让自己打到癫狂状态 逐渐迷失自我放弃
  • 在开发板上挂载NFS

    网络文件系统 NFS Network File System 是一种将远程主机上的分区 目录 经网络挂载到本地系统的一种机制 通过对网络文件系统的支持 用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区 目录 进行操作 在嵌入式L
  • 《动手学深度学习 Pytorch版》 4.8 数值稳定性和模型初始化

    4 8 1 梯度消失和梯度爆炸 整节理论 详见书本 梯度消失 matplotlib inline import torch from d2l import torch as d2l x torch arange 8 0 8 0 0 1 re
  • 安装完MySQL后,却没有密码,如何登录并修改密码?

    1 在终端输入sudo vim etc mysql mysql conf d mysqld cnf 2 在 mysqld 下方的skip external locking下面添加一行 skip grant tables 3 重启MySQL服
  • java实现io阻塞的代码_Java IO(2)阻塞式输入输出(BIO)

    在上文中 Java IO 1 基础知识 字节与字符 了解到了什么是字节和字符 主要是为了对Java IO中有关字节流和字符流有一个更好的了解 本文所述的输出输出指的是Java中传统的IO 也就是阻塞式输入输出 Blocking I O BI
  • Fabric介绍

    简介 由于比特币的流行 以太坊和一些别的衍生技术成长起来 对一些有创新力的企业开始关注区块链底层技术 分布式账本和分布式应用平台 然而 许多企业需要更高的性能 这是那些无须许可的区块链技术无法达到的 另外 在许多场景下 参与者的身份认证是一
  • ctfshow-萌新-web2( 利用intval函数特性配合SQL的特殊符号获取敏感数据 )

    ctf show 萌新模块 web2关 此关卡使用intval 函数强制将参数转换成数值型 可以使用字符绕过 配合特殊符号控制SQL的查询结果 从而获取flag 这一关过滤了or 我们可以使用加号 减号 乘号 除号 或 左移等方式绕过 页面
  • 嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

    嵌入式 Linux入 门第三课 熟悉掌握 Linux 常用 Shell 命令 矜辰所致 更新Shell echo 命令 2022 7 20 目录 前言 一 Shell 基本说明 1 1 Shell 是什么 1 2 Shell 与 终端 te
  • TensorFlow-gpu报错 failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

    记录错误 和解决方式 错误 failed call to cuInit CUDA ERROR NO DEVICE no CUDA capable device is detected 这个也是我今天运行TensorFlow GPU的一个cn
  • iOS 4层结构(iOS技术概要)—— Cocoa Touch 层(一)

    苹果公司的iOS平台强力推动了iOS开发 引来了不少人从事iOS开发 也成就了一批一批的开发者 如果你是新手 请把本文作为iOS技术一览 便于你对iOS开发有个粗略的认识 如果你已经是iOS开发者 建议你收藏本文 它是你日常开发的指导工具
  • C练题笔记之:Leetcode-167. 两数之和 II - 输入有序数组

    题目 给定一个已按照 非递减顺序排列 的整数数组 numbers 请你从数组中找出两个数满足相加之和等于目标数 target 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值 numbers 的下标 从 1 开始计数 所以答案数组
  • 原生JS实现拾色器功能

    没事儿干 写一个拾色器 原生 JS 实现 先看效果图 一 写页面 div class circle div circle width 200px height 200px border 1px 999 solid margin 200px
  • arduino笔记40:GSM/GPRS/GPS DEMO + 几种通信方式

    目录 一 准备 明确概念 GPS GSM 缺点 GPRS GNSS 二 芯片A7 三 这个模块 四 GPRS模块的一些坑 五 几种通信方式 蓝牙 Zigbee Z波 6LowPAN 线程 无线上网 WIFI 蜂窝 NFC Sigfox Ne
  • github精准搜索

    1 github的精准搜索 如下所示 可以按照自己想要的来进行搜索 简直不要太爽 按照项目名搜索 in name xxx 按照README搜索 in readme xxx 按照description搜索 in description xxx
  • ELFK之zookeeper+kafka

    目录 kafka zookeeper的系统架构 Zookeeper 一 zookeeper概述 二 zookeeper特点 三 zookeeper选举机制 四 应用场景 五 zookeeper实验实例 Kafka 一 概述 为什么需要消息队
  • discuz x 个人空间及群组地址实现二级域名的方法(APACHE独立主机)

    按以下操作 1 在域名控制面板添加A解析 增加一个主机头为 的纪录解析到你的论坛所在服务器 即做下域名泛解析 2 修改服务器上的apache conf httpd conf 或 apache conf extra httpd vhosts
  • sharepoint 2016小白快速部署入门篇(2)-AD域服务器安装和部署

    千里之行始于足下 SharePoint在网上教程也有很多 不过看的再多不如自己实际操作 下面就带领大家快速入门 根据以往经验 通常简单分为三台服务器 1 SharePoint server前端服务器 2 AD域控制器 3 SQL serve
  • 第四章 JDBC

    1 JDBC定义 JDBC是Java数据库连接技术的简称 提供连接各种常用数据库的能力 2 为什么需要JDBC JDBC场景1 客户端 本机 应用服务器 JDBC 数据库 返回至客户端 JDBC JDBC场景2 本机 访问 应用服务器 JD
  • React三子棋教程后续练习

    1 在游戏历史记录列表显示每一步棋的坐标 格式为 列号 行号 game state history中不仅需要记录棋盘 还需要记录此步落子的坐标 class Game extends React Component 修改Game构造函数中的h