当前位置:首页 > React

react如何引用canvas

2026-02-11 19:40:03React

在React中使用Canvas的方法

使用ref直接操作Canvas

通过React的useRef钩子获取Canvas DOM元素,直接在useEffect中绘制内容。这种方式适合需要精细控制Canvas绘制的场景。

import React, { useRef, useEffect } from 'react';

function CanvasComponent() {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    ctx.fillStyle = 'green';
    ctx.fillRect(10, 10, 150, 100);
  }, []);

  return <canvas ref={canvasRef} width={200} height={200} />;
}

封装Canvas为独立组件

将Canvas逻辑封装成可复用的组件,通过props传递绘制参数。这种方式适合需要多次使用Canvas或需要动态更新的场景。

function Canvas({ width, height, draw }) {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    draw(ctx);
  }, [draw]);

  return <canvas ref={canvasRef} width={width} height={height} />;
}

function App() {
  const draw = (ctx) => {
    ctx.fillStyle = 'blue';
    ctx.fillRect(0, 0, 100, 100);
  };

  return <Canvas width={200} height={200} draw={draw} />;
}

使用第三方库

对于复杂Canvas操作,可以使用专门的React Canvas库如react-konvafabric.js。这些库提供了更高级的API和性能优化。

import { Stage, Layer, Rect } from 'react-konva';

function KonvaExample() {
  return (
    <Stage width={300} height={300}>
      <Layer>
        <Rect x={50} y={50} width={100} height={100} fill="red" />
      </Layer>
    </Stage>
  );
}

处理Canvas动画

在React中实现Canvas动画需要使用requestAnimationFrame,注意在组件卸载时清除动画循环。

function AnimatedCanvas() {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    let frameId;
    let x = 0;

    function render() {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      ctx.fillRect(x, 10, 50, 50);
      x += 1;
      frameId = requestAnimationFrame(render);
    }
    render();

    return () => cancelAnimationFrame(frameId);
  }, []);

  return <canvas ref={canvasRef} width={300} height={100} />;
}

响应式Canvas

使Canvas自动适应容器大小,需要监听resize事件并调整Canvas尺寸。

react如何引用canvas

function ResponsiveCanvas() {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const container = canvas.parentElement;

    function resizeCanvas() {
      canvas.width = container.clientWidth;
      canvas.height = container.clientHeight;
      const ctx = canvas.getContext('2d');
      ctx.fillStyle = 'purple';
      ctx.fillRect(0, 0, canvas.width, canvas.height);
    }

    resizeCanvas();
    window.addEventListener('resize', resizeCanvas);
    return () => window.removeEventListener('resize', resizeCanvas);
  }, []);

  return (
    <div style={{ width: '100%', height: '200px' }}>
      <canvas ref={canvasRef} />
    </div>
  );
}

标签: reactcanvas
分享给朋友:

相关文章

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

typescript react 如何

typescript react 如何

TypeScript 与 React 结合使用的方法 在 React 项目中使用 TypeScript 可以提升代码的可维护性和类型安全性。以下是一些关键步骤和最佳实践: 安装 TypeScript…

如何恢复react

如何恢复react

恢复 React 项目的方法 检查并修复依赖项 运行 npm install 或 yarn install 重新安装所有依赖项。如果依赖项损坏或缺失,这将恢复项目所需的库和工具。 恢复删除的文件 如…

react如何扩展

react如何扩展

扩展 React 项目的常用方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式。通过包裹组件并注入额外属性或逻辑,可以实现功能扩展。例如,一个日志记录的高阶组件: function…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…