React dnd - 棋盘教程示例问题

React dnd - chessboard tutorial example issue

我想让马可以移动到任何方格(不遵循游戏规则)。所以我更改了函数:文件 Game.js 中的 canMoveKnight,如下所示:

canMoveKnight(toX, toY) {
    return true;  
}

结果是:骑士根本不能移动。

但是如果我将函数更改为:

canMoveKnight(toX, toY) {
    const [x, y] = this.knightPosition
    return (x !== toX || y !== toY)
}

基本上就是把骑士位置排除掉。在其他方块中仍然 return TRUE。有效。

任何人都可以帮助解释为什么 return 所有方块都不起作用?

您可以在此处试用源代码: https://codesandbox.io/s/github/react-dnd/react-dnd/tree/gh-pages/examples_hooks_js/00-chessboard?from-embed

幸运的是,我认为有人在问题关闭前回答了这个问题。

我试过这个答案。通过将 zIndex 添加到 Knight,它确实有效。

没有 zIndex,BoardSquare 会捕获鼠标事件,并且 BoardSquare 不可拖动。

您 运行 遇到了一个奇怪的问题!我也很想听听其他人对此的回答,因为我仍然对问题的原因很好奇。不过我确实为您找到了解决方案!

如果骑士棋子位于同样有效的棋子上,它似乎以某种方式被阻止被点击。 (如果有人知道为什么请分享)

要解决此问题,您可以将 position: absolute 添加到骑士以及 z-index: <value>。这使得骑士 div 出现在所有其他事物之上,因此它仍然可以拖动。

具体来说,您可以将 Knight.jsx 中的 knightStyle 更改为:

const knightStyle = {
    fontSize: 40,
    fontWeight: 'bold',
    cursor: 'move',
    position: 'absolute',
    zIndex: 50,
};