当前位置:首页 > React

react 如何使用canvas

2026-02-11 19:22:18React

使用 Canvas 在 React 中的方法

通过 useRef 直接操作 Canvas

在 React 中可以通过 useRef 获取 Canvas 的 DOM 节点,直接使用 Canvas API 进行绘制。创建一个组件时,在 useEffect 中处理绘制逻辑以避免重复渲染。

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

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

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

    // 绘制矩形
    ctx.fillStyle = 'blue';
    ctx.fillRect(10, 10, 100, 100);
  }, []);

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

封装 Canvas 为自定义 Hook

将 Canvas 操作封装为自定义 Hook 以便复用。例如创建一个 useCanvas Hook 处理初始化和绘制逻辑。

function useCanvas(draw) {
  const canvasRef = useRef(null);

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

  return canvasRef;
}

function CanvasComponent() {
  const draw = (ctx) => {
    ctx.fillStyle = 'red';
    ctx.fillRect(50, 50, 150, 150);
  };
  const canvasRef = useCanvas(draw);

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

动态响应数据变化

通过依赖数组动态更新 Canvas 内容。当传入的数据变化时,触发 useEffect 重新绘制。

function DynamicCanvas({ color, size }) {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = color;
    ctx.fillRect(10, 10, size, size);
  }, [color, size]);

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

使用第三方库(如 react-konva)

对于复杂场景(如图层管理、事件处理),可以使用专门为 React 优化的库如 react-konva

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

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

性能优化建议

避免在每次渲染时重新创建绘制函数,使用 useCallback 缓存函数。对于频繁更新的动画,使用 requestAnimationFrame 控制渲染周期。

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

  const animate = useCallback(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    // 更新动画逻辑
    frameRef.current = requestAnimationFrame(animate);
  }, []);

  useEffect(() => {
    frameRef.current = requestAnimationFrame(animate);
    return () => cancelAnimationFrame(frameRef.current);
  }, [animate]);

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

注意事项

  • 直接操作 Canvas 时需手动处理清理逻辑(如 clearRect)。
  • 在高分辨率屏幕上,通过设置 canvas.widthstyle.width 避免图像模糊。
  • 事件监听需通过 React 合成事件系统或直接绑定到 Canvas 节点。

react 如何使用canvas

分享给朋友:

相关文章

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impo…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏…

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…