当前位置:首页 > 技术 > 正文内容

React-Resizable组件实现可调整大小功能

访客 技术 2026年5月23日 4

1. 项目概述

React-Resizable 是一个轻量级的React组件库,专门用于为现有组件添加可调整大小的功能。该组件采用 div 元素作为默认包装容器,同时支持通过 as 属性自定义包装元素类型。当用户调整组件尺寸时,会触发相应的回调函数,方便开发者执行自定义逻辑。

2. 环境配置与安装

安装命令

在项目根目录下执行以下命令安装依赖:

npm install react-resizable
# 或者使用yarn
yarn add react-resizable

确保项目中已包含 reactreact-dom 依赖。

3. 基础使用示例

以下示例演示了如何创建一个基本可调整大小的容器:

import React, { useRef } from 'react';
import Resizable from 'react-resizable';

function DynamicPanel() {
  const containerRef = useRef(null);

  const handleResizeEnd = (event, direction, ref, delta, dimensions) => {
    console.log(`新尺寸: ${dimensions.width}px × ${dimensions.height}px`);
  };

  return (
    <Resizable
      width={300}
      height={200}
      onResizeStop={handleResizeEnd}
      minConstraints={[100, 80]}
      maxConstraints={[800, 600]}
    >
      <div ref={containerRef} style={{ padding: '20px', background: '#f5f5f5' }}>
        可调整大小的面板区域
      </div>
    </Resizable>
  );
}

export default DynamicPanel;

4. 核心属性配置

常用属性说明:

  • width / height:设置组件的初始尺寸
  • minConstraints / maxConstraints:限制尺寸调整的范围
  • onResizeStart:调整开始时的回调函数
  • onResize:调整过程中的回调函数
  • onResizeStop:调整结束时的回调函数
  • grid:设置网格对齐,实现按固定像素步长调整
  • as:自定义包装元素类型

5. 最佳实践建议

5.1 网格对齐功能

使用 grid 属性可以实现平滑的网格对齐效果:

<Resizable
  width={400}
  height={300}
  grid={[20, 20]}
>
  <div>网格对齐内容</div>
</Resizable>

5.2 限制调整方向

通过 resizeDirections 属性可以限制只能在特定方向调整大小:

<Resizable
  width={300}
  height={200}
  resizeDirections={['bottomRight']}
>
  <div>仅允许右下角调整</div>
</Resizable>

5.3 动态更新尺寸

结合 ref 可以实现程序化控制尺寸:

function ControlledResizable() {
  const resizeRef = useRef(null);

  const updateDimensions = (newWidth, newHeight) => {
    if (resizeRef.current) {
      resizeRef.current.updateSize({ width: newWidth, height: newHeight });
    }
  };

  return (
    <>
      <button onClick={() => updateDimensions(500, 400)}>调整尺寸</button>
      <Resizable ref={resizeRef} width={200} height={150}>
        <div>动态控制面板</div>
      </Resizable>
    </>
  );
}

6. 相关生态项目

React生态中还有其他优秀的尺寸调整相关库:

  • react-rnd:支持拖拽和尺寸调整的组合功能
  • react-split-pane:提供可调整的分隔面板组件
  • react-resizable-panels:现代React分隔面板实现

这些库可根据具体场景选择使用,适合构建拖拽布局、仪表盘、可视化编辑器等复杂交互界面。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。