You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-chessboard+chess.js报错:gameCopy.move不是函数的解决方法

修复"gameCopy.move is not a function"错误的方案

错误原因

你用{...game}复制Chess类实例的方式是错误的。对象展开运算符只能复制实例的可枚举属性,而Chess类的move等方法并不会被复制到新对象中,导致gameCopy变成了一个普通对象,自然不存在move方法。

修复方案

方法1:使用Chess实例自带的clone()方法

chess.js的实例提供了clone()方法,可以完整复制一个包含所有方法的Chess实例:

const makeMove = (move) => {
    const gameCopy = game.clone();
    gameCopy.move(move);
    setGame(gameCopy);
}

方法2:通过FEN字符串重新创建Chess实例

如果clone()方法不可用,也可以利用当前棋局的FEN字符串,重新初始化一个Chess实例:

const makeMove = (move) => {
    const gameCopy = new Chess(game.fen());
    gameCopy.move(move);
    setGame(gameCopy);
}

完整修复后的代码

import React from 'react';
import {useState} from 'react';
import {Chessboard} from 'react-chessboard';
import {Chess} from 'chess.js';

const Board = () => {
    const [game, setGame] = useState(new Chess());

    const makeMove = (move) => {
        const gameCopy = game.clone();
        // 如果不需要验证走法合法性,可添加sloppy参数强制允许任意走法
        gameCopy.move(move, { sloppy: true });
        setGame(gameCopy);
    }

    const onDrop = (startSquare, endSquare) => {
        makeMove({
            from: startSquare,
            to: endSquare,
        });
    }

    return <Chessboard position={game.fen()} onPieceDrop={onDrop} />;
}

export default Board;

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:35:20