React_井字棋

2023-11-05

该项目是跟着react官网写的,由于是初学,就只用来记录自己的代码
如果和我一样是初学react建议看官网:react

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';

// 按钮
function Square(props) {
    return (
        <button className="square"
                onClick={() => {
                    props.onClick()
                }}>
            {props.value}
        </button>
    );

}

// 棋盘格子
class Board extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            squares: Array(9).fill(null),
            xIsNext: true
        }
    }

    handleClick(i) {
        const squares = this.state.squares.slice()
        if (calculateWinner(squares)||squares[i]){
            return
        }
        squares[i] = this.state.xIsNext ? 'X' : 'O'
        this.setState({
            squares: squares,
            xIsNext: !this.state.xIsNext
        })
    }

    renderSquare(i) {
        return <Square value={this.state.squares[i]}
                       onClick={() => this.handleClick(i)}/>;
    }

    render() {
        const winner = calculateWinner(this.state.squares)
        let status;
        if (winner) {
            status = 'Winner:' + winner
        } else {
            status = 'Next player' + (this.state.xIsNext ? 'X' : 'O')
        }

        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>
        );
    }
}

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>
        );
    }
}

// ========================================


const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Game/>);

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
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React_井字棋 的相关文章

  • React 渲染中的不变违规或 React 中迭代和返回的正确方法

    我在 React 渲染中遇到了持续存在的问题 这段代码 jsx React DOM var AnswerRows React createClass componentDidMount function render function th
  • React-i18next 每个组件的翻译

    我正在使用react i18next 事情是它期望
  • 如何使用 axios / jest 测试失败的请求

    我创建了一个非常小的应用程序 如果您传递硬币和数量 它可以计算为某些加密货币支付的总价格 我想测试错误 但我总是收到 收到的承诺已解决而不是被拒绝 我相信这是因为如果 url 错误 axios 仍然会解决承诺 我遇到的第二个问题是 我尝试测
  • 未捕获的类型错误:this.props.signinUser 不是一个函数(…)

    src actions index js import axios from axios const ROOT URL http localhost 3090 export function signinUser email passwor
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 向对象添加元素

    我需要填充一个 json 文件 现在我有这样的东西 element id 10 quantity 1 我需要添加另一个 元素 我的第一步是使用该 json 将该 json 放入对象类型中cart JSON parse 现在我需要添加新元素
  • 引入 V8 后,Google Apps 脚本无法为其他用户完全执行

    我编写了一个脚本 得到了这里好心人的大力帮助 该脚本使用 Google Sheets 脚本复制 Google Drive 上的文件夹 和内容 它运行了很长一段时间 但后来我启用了 V8 引擎 现在已禁用 问题是 它仍然适用于我 也许还有其他
  • 点击问题:动态生成的链接不触发点击功能

    下面是两个代码片段 由于某种原因什么也没有发生 但来自同一个 JS 文件的其他 jQuery 函数在带有 UL 的页面上执行得很好 这是在盯着我看吗 ul class paganation li 1 li li a href 2 a li
  • ReactJS:从没有 onChange 事件的 props 中选择默认值?

    所以 我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序 我有一个道具传递我想要选择的选项的默认值 如果我有的话 它就没有问题
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • 将 NPM 包客户端与 nuxt 结合使用

    我对 nuxt 和 javascript 非常陌生 我正在尝试弄清楚如何在客户端使用我的应用程序的依赖项 我将它们列在我的 nuxt config js 中并使用 npm 安装 我也有一个文件 plugins导入它们的目录 不确定这是否好
  • 使用 JavaScript 的计时器

    我想使用java脚本实现计时器 我想随着间隔的变化而减少计时器 Example假设我的计时器从 500 开始 我想要根据级别减少计时器 例如1 一级定时器应减1 且递减速度应较慢 2 2级定时器应递减2 递减速度应为中等3 3级定时器应减3
  • Window 与 Var 声明变量[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 在声明组件选择器时添加指令 - Angular 7

    我正在学习 Angular 并通过单击按钮动态创建组件 我正在尝试使用 Angular Material 的拖放功能来拖动这些创建的组件以对它们进行排序 我的基本组件 html 中有以下代码 div style margin 20px di
  • 错误:创建 React Native 项目版本 0.59.9 时找不到 template.config.js

    当我尝试创建 React Native 项目版本 0 59 9 时 出现以下错误 错误错误 无法在 react native 模板中找到 var folders zc h93bvpb573q24 5ynvgkn1wc0000gn T rnc
  • 如何在 JavaScript 中获取浮点数的小数位?

    我想要的是与 Number prototype toPrecision 几乎相反的 这意味着当我有数字时 它有多少位小数 例如 12 3456 getDecimals 4 对于任何想知道如何更快地完成此操作 无需转换为字符串 的人 这里有一
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne

随机推荐

  • ORA-00933: SQL命令未正确结束 解决办法

    1 报错内容 Cause java sql SQLSyntaxErrorException ORA 00933 SQL 命令未正确结束 bad SQL grammar nested exception is java sql SQLSynt
  • SpringBoot原理解析(超详细)

    SpringBoot原理解析 1 SpringBootApplication原理解析 首先 我们直接追踪 SpringBootApplication的源码 Target ElementType TYPE Retention Retentio
  • JMeter获取数据库数据作为接口参数

    1 既然是操作数据库肯定具备需要对数据库的配置 2 在接口测试的过程中有OA需要进行账号切换 因此在这里利用sql直接查询数据 3 且看配置 variables names设置为A C 那么如下变量会被设置为 A 2 总行数 A 1 第1列
  • python爬取微信公众号文章

    爬取微信公众号文章 获取微信公众号的url 获取每一篇文章的url 选择一个公众号进入 选择一个目录进入后点复制链接 然后去浏览器打开 按F12打开检查的模式 在Console中输入 x 标签路径 找到子文章的目录xpath 然后分离出每篇
  • UDP实现点对点聊天-C语言

    UDP实现点对点聊天 服务器端 操作步骤 1 编译 gcc UDPSt c lws2 32 o UDPSt exe 2 运行 UDPSt include
  • 2021年蓝桥杯c++b组解析(个人)

    随着蓝桥杯不断地推进 期间也要多加练习才能有所收获 对于这份去年的试卷 个人感觉有些难度 具体体现在数字大 状态方程难想 对于后四题编程都有所难度 本人也只能通过40 60 的样例 下面针对下面10个题进行系统讲解 部分代码与思路源于网上
  • 苹果M1芯片上运行Stable Diffusion(文字作画)

    1 源码下载 git clone b apple silicon mps support https github com bfirsh stable diffusion git cd stable diffusion 2 修改gitee国
  • 聚观早报

    今日要闻 谷歌发布全球最大视觉语言模型 马斯克预计Twitter下季度现金流转正 王兴投资王慧文ChatGPT项目 美国拟明年 11 月开展载人绕月飞行 慧与科技宣布收购Athonet 谷歌发布全球最大视觉语言模型 近日 来自谷歌和德国柏林
  • Python学生信息管理系统【GUI界面版 + 期末报告书 + 功能实现讲解】

    课程设计说明 GUI 使用的是Python自带的 tkinter 模块 无需配置 Python自带的模块直接导包使用即可 包含了增删改查 保存文件 满足 90 大学生期末课程设计需求 运行时在main py文件右键运行即可 完整文件关注私聊
  • 进程间通信--管道通信

    进程间通信 在两个进程之间 每个进程各自有不同的用户地址空间 任何一个进程的全局变量在另一个进程中都看不到 比如 在父进程中的全局变量 如果在子进程中去改变这个全局变量 则子进程中被改变的这个值不会去影响父进程 因为子进程中的所有数据都是通
  • Visual Studio 2022 常用快捷键,记录一下别忘记~

    Visual Studio 2022 常用快捷键 记录一下别忘记 Ctrl E C 注释代码 Ctrl E U 取消注释代码 Ctrl E D 格式化全部代码 Ctrl Shift A 新建类 Ctrl R G 删除无效Using Ctrl
  • RestTemplate的详解

    引言 在SpringCloud微服务中 通过引入 ribbon实现了服务消费者的客户端负载均衡功能 在这个过程中使用了一个非常有用的对象 RestTemplate 该对象会使用 Ribbon 的自动化配置 同时通过配置 LoadBalanc
  • MATLAB 程序设计

    文章目录 前言 一 M文件操作介绍 M文件的创建与打开 1 建立新的M文件 2 打开已有的 文件 3 脚本文件的运行 二 输入输出语句 1 输入函数 input 2 输出函数 display和disp 3 格式化输出函数 fprintf 4
  • 把单元格一分为二_excel如何把一个单元格分成两个 excel单元格拆分为二行

    excel如何把一个单元格分成两个 excel单元格拆分为二行 excel助手 今天为大家分享一篇干货知识 如何设置excel单元格拆分为二行 今天的分享角度是从工作中常用的角度谈的 正如标题提到的 excel如何把一个单元格分成两个 ex
  • 线性代数笔记 2 - 矩阵的初等变换

    矩阵的初等变换 初等行变换 对换两行 对换i j 两行 记作 r i r j
  • abp web.mvc项目中的菜单加载机制

    abp中的菜单加载机制 在abp中菜单的定义与我们传统写的框架不一样 它是在编写代码的时候配置 而我们一般写的通用权限管理系统中 是后期在后台界面中添加的 这一点有很大不同 abp关于菜单的定义及管理挺复杂的 与菜单相关的结构类 接口及扩展
  • ArcGIS Server Linux 10.7压缩包

    ArcGIS Server Linux 10 7压缩包 链接 https pan baidu com s 1GYjElpbXZN0938 vWyWSOA 提取码 nkbp
  • 分享一个去水印接口,完全免费,早点下手啊

    上传到任意空间或者服务器 访问即可用 目前支持很多平台 抖音 快手 皮皮虾 西瓜 红书 微视 最右 哔哩哔哩 皮皮搞笑等常见平台 而且还是免费的 该接口测试 完全免费 如果那天收费了 大家可以直接放弃使用
  • linux下如何清理缓存

    手头的路由本身内存就比较少 上面又跑了一个nginx php的环境 简直慢的爆炸 check的时候发现内存经常被占了很多 linux的虚拟内存机制 很多时候回导致内存得不到及时释放 有时候内存很少了 kill了很多进程 但是内存还是没有释放
  • React_井字棋

    该项目是跟着react官网写的 由于是初学 就只用来记录自己的代码 如果和我一样是初学react建议看官网 react import React from react import ReactDOM from react dom clien