当前位置:首页 > React

react 如何切canvas

2026-03-31 00:26:32React

在 React 中集成 Canvas

React 中可以通过 useRefuseEffect 钩子直接操作 Canvas。创建一个 canvas 元素的引用,在组件挂载后通过 getContext 获取绘图上下文。

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

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

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

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

动态调整 Canvas 尺寸

为避免 Canvas 渲染模糊,需根据设备像素比(DPR)调整宽高。通过 window.devicePixelRatio 缩放 Canvas 的实际尺寸,同时用 CSS 控制显示尺寸。

react 如何切canvas

useEffect(() => {
  const canvas = canvasRef.current;
  const dpr = window.devicePixelRatio || 1;
  canvas.width = canvas.clientWidth * dpr;
  canvas.height = canvas.clientHeight * dpr;
  const ctx = canvas.getContext('2d');
  ctx.scale(dpr, dpr);
}, []);

使用第三方库优化绘制

对于复杂场景,可使用库如 react-konvafabric.js 简化 Canvas 操作。react-konva 提供声明式 API,支持图层管理和事件处理。

react 如何切canvas

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

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

性能优化策略

频繁绘制的动画场景中,使用 requestAnimationFrame 替代 setInterval。清理函数中取消动画帧以避免内存泄漏。

useEffect(() => {
  let animationId;
  const animate = () => {
    const ctx = canvasRef.current.getContext('2d');
    // 绘制逻辑
    animationId = requestAnimationFrame(animate);
  };
  animate();
  return () => cancelAnimationFrame(animationId);
}, []);

响应式 Canvas 设计

监听窗口大小变化时,需重新计算 Canvas 尺寸。使用 ResizeObserverwindow.addEventListener 实现自适应布局。

useEffect(() => {
  const handleResize = () => {
    const canvas = canvasRef.current;
    canvas.width = canvas.clientWidth * window.devicePixelRatio;
    canvas.height = canvas.clientHeight * window.devicePixelRatio;
    // 重绘内容
  };
  window.addEventListener('resize', handleResize);
  return () => window.removeEventListener('resize', handleResize);
}, []);

标签: reactcanvas
分享给朋友:

相关文章

vue实现canvas切换

vue实现canvas切换

在Vue中实现Canvas切换 准备工作 确保项目中已安装Vue,创建一个新的Vue组件或使用现有组件。Canvas切换通常涉及动态渲染不同的图形或场景。 创建Canvas元素 在Vue组件的模板中…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

如何开发react

如何开发react

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

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工具…

react如何注销

react如何注销

React 组件的注销方法 在 React 中,组件的注销通常指的是在组件卸载时执行清理操作,例如取消订阅、清除定时器或释放资源。以下是几种常见的方法: 使用 useEffect 钩子的清理函数…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…