在 React 中自动缩放输入值的宽度

2023-12-26

我想要一个宽度适应其内容的输入。

我正在尝试实施这个类似问题的答案 https://stackoverflow.com/a/38867270/5308892,但是使用 React:

import React, { useState } from 'react';

export default () => {
  const [content, setContent] = useState('');
  const [width, setWidth] = useState(0);

  const changeHandler = evt => {
    setContent(evt.target.value);
  };

  return (
    <wrapper>
      <span id="hide">{content}</span>
      <input type="text" autoFocus style={{ width }} onChange={changeHandler} />
    </wrapper>
  );
};

问题是我不知道如何查询跨度的宽度,以便更改输入的宽度(使用setWidth).

我怎样才能实现这个目标?


经过一番折腾,我找到了解决方案!

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

export default () => {
  const [content, setContent] = useState('');
  const [width, setWidth] = useState(0);
  const span = useRef();

  useEffect(() => {
    setWidth(span.current.offsetWidth);
  }, [content]);

  const changeHandler = evt => {
    setContent(evt.target.value);
  };

  return (
    <wrapper>
      <span id="hide" ref={span}>{content}</span>
      <input type="text" style={{ width }} autoFocus onChange={changeHandler} />
    </wrapper>
  );
};

获取参考#hide我雇用的跨度useRef。然后,width状态变量可以通过内部定义的函数进行更新useEffect,每次都会被调用content变化。

我还必须切换display: none在CSS中#hide for position: absolute and opacity: 0,否则targetRef.current.offsetWidth总是评估为 0。

Here's 一个工作演示 https://jsfiddle.net/cabralpinto/h32wob50/1/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React 中自动缩放输入值的宽度 的相关文章

随机推荐

  • Oracle关于集合和顺序的表表达式

    我正在分析一些现有的 PL SQL 代码 我可以看到 Oracle 集合在使用表表达式的查询中未嵌套的情况 没有 order 子句 并且代码显然假设项目将按存储在集合中的顺序返回 我知道如果没有 order by 则不能假设 select
  • 以编程方式访问 Google Chrome 主页或起始页

    Chrome 在哪里保存主页或起始页 URL 我想使用 C 以编程方式访问它 默认位置是 视窗XP 谷歌浏览器 C Documents and Settings
  • 如何在 ASP.NET MVC3 控制器中返回部分视图?

    我有一个控制器 其方法之一 操作 访问我的项目数据库 该方法检查项目类型 仅当从数据库检索的项目属于特定类型时 如何显示我的部分视图 控制器动作示例 public ActionResult CheckItem Koko model var
  • jquery 中是否有原型序列化()的等效项

    我正在尝试将表单的数据传递给jquery ajax请求 我找到了制作原型的简单方法 formid serialize 这将需要一个字符串 其中包含该表单中的所有元素名称及其值 以方便的方式为 ajax 请求做好准备 这很容易 那么jquer
  • Google Sheets 可安装 onEdit() 触发器无权添加日历事件

    我正在编写附加到 Google 电子表格的脚本 该脚本可以帮助我为员工生成轮班时间表 创建 Google 日历并在人们换班时更新日历 我在电子表格上附加了一个 onEdit 可安装触发器 用于检查用户是否更改了特定范围内的单元格 以交换班次
  • spring-boot:run 和 spring-boot:start 有什么区别

    有什么区别spring boot run and spring boot start 我看到它们都可用Maven 目标 但有什么区别呢 弹簧启动 运行 描述 运行可执行的存档应用程序 弹簧启动 启动 描述 启动一个 Spring 应用程序
  • Knockout获取属性值onClick函数

    具有 attr 值 Qref 的 HTML 视图 这是用于绑定的 HTML 代码 目前我已经硬编码了 Href 属性值
  • Android:文件名包含空格的 ffmpeg

    我想从 Android 应用程序执行 ffmpeg 如下所述 将 FFmpeg 与 Android NDK 结合使用 https stackoverflow com questions 9605757 using ffmpeg with a
  • 核心数据:在索引 x 处获取的对象有一个无序的节名称“xxxxxx”。对象必须按部分名称排序

    我知道我不是第一个问这个问题的人 但我真的很困惑 基本上我有一个带有两个按钮的屏幕 每个按钮根据日期将数据加载到下面的表格视图中 第一次加载第一个表格视图时 默认情况下选择左侧按钮 一切都显示正常 如果我单击右侧按钮并得到一个空白的表格视图
  • 如何从工具提示中删除方形标签并将其信息放在一行中?

    如何从工具提示中删除这个方块 如果我能设法只写一行这样的内容 我会更喜欢 二月 2 var data labels January February March datasets data 1 2 3 var myLineChart new
  • 使用 .save() 传递 url 参数来发布表单数据

    我发布的页面接受 id 电子邮件等参数 我该如何发送 index id 001 email protected cdn cgi l email protection 在backbone js中 model save 您可以将第二个参数中的任
  • 有没有更好的方法来比较字典值

    我目前正在使用以下函数来比较字典值并显示所有不匹配的值 有没有更快或更好的方法来做到这一点 match True for keys in dict1 if dict1 keys dict2 keys match False print ke
  • Tensorflow - h5模型到tflite转换错误

    我使用预训练的 InceptionV3 模型进行了学习迁移 并保存了 h5 模型文件 之后 我就能做出预测 现在 我想使用 TFLiteConverter convert 方法将 h5 模型转换为 tflite 文件 如下所示 conver
  • 无法在 R 上安装包

    当我尝试为 R 安装 Bioconductor 时遇到问题 我到处搜索解决方案 但没有任何东西真正适合我 请问 有什么建议吗 The downloaded binary packages are in var folders 74 y92t
  • 添加任务计划程序

    我正在开发 Apache Cordova 应用程序 我想知道是否可以将任务添加到调度程序设备 我必须在特定时间运行警报和通知 我该怎么做 我考虑过向调度程序设备添加一个任务并委派责任 这个有可能 至少安卓4 4 Thanks 首先 是的 你
  • 如何使用Rubberduck管理本地git存储库

    我在用着橡皮鸭 http rubberduckvba com 版本 2 0 13 与本地 git 存储库结合使用 用于对我的 VBA 项目进行版本控制 目前 每次我使用 Rubberduck 启动时 我都需要重新打开存储库Manage gt
  • SWIG 接口通过函数参数接收 Java 中的不透明结构引用

    我正在尝试使用 SWIG 来使用适用于 Android 的 Spotify API libspotify https developer spotify com technologies libspotify https developer
  • 标记水平 EMA 线(变量)

    这是我使用 atm 的代码 感谢比约恩 米斯蒂安 len1 input 10 minval 1 title Length len2 input 21 minval 1 title Length len3 input 55 minval 1
  • 创建父子数组 PHP

    我有一个平面数组 我试图将其转换为父子数组 Array 0 gt Array parent id gt t3 42yrg7 id gt t1 cze7b2e 1 gt Array parent id gt t3 42yrg7 id gt t
  • 在 React 中自动缩放输入值的宽度

    我想要一个宽度适应其内容的输入 我正在尝试实施这个类似问题的答案 https stackoverflow com a 38867270 5308892 但是使用 React import React useState from react