当前位置:首页 > 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
分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react 如何操作cookie

react 如何操作cookie

安装依赖 在React项目中操作cookie通常需要第三方库的支持,推荐使用js-cookie。通过npm或yarn安装: npm install js-cookie # 或 yarn add js…

react如何引用canvas

react如何引用canvas

使用 ref 直接操作 Canvas 在 React 中通过 useRef 钩子创建引用,绑定到 <canvas> 元素的 ref 属性。组件挂载后可通过 ref.current 获取原生…

react如何防止重复

react如何防止重复

防止重复渲染的方法 在React中,防止组件不必要的重复渲染是优化性能的关键。以下是几种常见的方法: 使用React.memo React.memo是一个高阶组件,用于对函数组件进行浅比较,避免在…

macbook如何安装react

macbook如何安装react

安装 Node.js 和 npm 在 MacBook 上安装 React 需要先安装 Node.js 和 npm(Node Package Manager)。Node.js 是运行 JavaScrip…

react 如何切canvas

react 如何切canvas

在 React 中操作 Canvas React 中操作 Canvas 需要通过 useRef 获取 DOM 节点,并在 useEffect 或组件挂载后通过原生 API 绘制内容。以下是具体实现方法…