如何在反应中获得画布的正确宽度和高度?

sky*_*pen 4 canvas ref reactjs

我正在尝试在 React 中使用画布。下面的代码应该给我一个黑色的 800x800 画布,但由于某种原因它忽略了我的尺寸并显示了一个 300x150 的画布。

import React, {Component} from "react";

class Sample extends Component {

    state = {
        canvasWidth: 800,
        canvasHeight: 800
    }
    canvasRef = React.createRef();

    componentDidMount() {
        const canvas = this.canvasRef.current;
        const context = canvas.getContext('2d');
        context.fillRect(0, 0, this.state.canvasWidth, this.state.canvasHeight);
    }

    render() {
        return (
            <div>
                <canvas ref={this.canvasRef} />
            </div>
        );
    }
}

export default Sample
Run Code Online (Sandbox Code Playgroud)

Aus*_*chs 6

您需要将宽度和高度设置为 html 属性:

   <canvas ref={this.canvasRef} width={this.state.canvasWidth} height={this.state.canvasHeight}/>
Run Code Online (Sandbox Code Playgroud)

  • OP 的注释:请小心这一点,因为即使使用“ref”,每当通过“setState()”更改“width”和“height”时,画布也会被清除。 (3认同)
  • @skypen这是一个很好的建议,只是想让你意识到潜在的意想不到的副作用。这种行为并不是 React 独有的,只是“width”和“height”属性实际上是属性访问器,它们在调整大小时也会清除画布。 (3认同)