画布不会画任何东西 - React,Typescript

Posted

技术标签:

【中文标题】画布不会画任何东西 - React,Typescript【英文标题】:Canvas wont draw anything - React, Typescript 【发布时间】:2020-12-19 09:38:33 【问题描述】:

我对 TS 完全陌生,我正在尝试用画布做一些简单的绘图。我没有收到任何错误,但即使是函数内部的控制台日志也没有显示任何内容。

function gameLoader() 
  const gameCanvas = document.getElementById("gameCanvas") as htmlCanvasElement;
  var ctx = gameCanvas.getContext("2d");
  ctx.fillStyle = "blue";
  ctx.fillRect(0, 0, 150, 75);
  console.log(document.getElementById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx"));


export default class SnakeTheGame extends React.Component<
  ISnakeTheGameProps,
  
> 
  public render(): React.ReactElement<ISnakeTheGameProps> 
    return (
      <div className=styles.snakeTheGame id="gameWindow">
        <canvas
          id="gameCanvas"
          
          
          onLoad=() => gameLoader()
        ></canvas>
      </div>
    );
  

我只是不知道如何解决它。我将不胜感激。

【问题讨论】:

SnakeTheGame 是否被任何东西渲染?您的应用是否正在渲染到 DOM 中? 是的,Canvas 有正确的尺寸和 ID。 (是 sharepoint webpart) 使用 ref,不要使用 getElementById 【参考方案1】:

canvas onload 仅在加载时触发,因此如果您将加载器函数置于 onload 中,它将永远不会运行

这是一个可能的解决方案

function gameLoader(gameCanvas: HTMLCanvasElement) 
  var ctx = gameCanvas.getContext("2d");
  ctx.fillStyle = "blue";
  ctx.fillRect(0, 0, 150, 75);
  console.log(document.getElementById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx"));


export default class SnakeTheGame extends React.Component<
  ISnakeTheGameProps,
  
> 
  public render(): React.ReactElement<ISnakeTheGameProps> 
    const ref = useRef<HTMLCanvasElement>();
    useEffect(() => gameLoader(ref.current), []);
    return (
      <div className=styles.snakeTheGame id="gameWindow">
        <canvas
          ref=ref
          
          
        ></canvas>
      </div>
    );
  

【讨论】:

感谢您的推荐。对不起,我有一段时间没来了。尝试此操作时遇到一些错误,但现在我了解画布 onLoad。非常感谢您的宝贵时间。【参考方案2】:

请试试下面的代码:

export default class Testcanvas extends React.Component<ITestcanvasProps, > 
  public render(): React.ReactElement<ITestcanvasProps> 
    return (
      <div className=styles.testcanvas>
        <canvas
          ref="canvas"
          
          
        ></canvas>
      </div>
    );
  

  public componentDidMount() 
    this.gameLoader();
  

  private gameLoader(): void 
    const ctx = (this.refs.canvas as HTMLCanvasElement).getContext('2d');
    ctx.fillStyle = "blue";
    ctx.fillRect(0, 0, 150, 75);
    console.log("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx");
  

测试结果:

BR

【讨论】:

以上是关于画布不会画任何东西 - React,Typescript的主要内容,如果未能解决你的问题,请参考以下文章

无法在多个画布上绘制

在画布上绘制视图被拖动的任何位置

Android 绘制带动画的矩形定时器

使用画布或 html、css 跨越任何设备并位于中心

HTML5:在带有控件的视频上放置画布

为啥画布会弄乱我的图像颜色?