You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带ref的TextArea/Input组件异常:赋值后鼠标悬停值消失

问题原因

你直接通过ref修改DOM的value属性,这和React的状态管理机制冲突了。React会管控组件的渲染状态,当组件因为鼠标悬停触发重绘(比如样式更新)或者其他原因重新渲染时,会用React内部维护的状态值覆盖你手动修改的DOM值,导致内容消失。不管是TextArea还是Input组件,只要是React封装的表单组件,都会存在这个问题。

解决方案

改用受控组件的方式,用React状态来管理输入框的值,代替直接操作DOM:

import React, { useState } from 'react';

// 声明状态变量管理输入框内容
const [inputValue, setInputValue] = useState('');

const onAddFeature = () => {
  // 通过状态更新输入框内容
  setInputValue(Math.random().toString(32));
};

// 渲染组件
return (
  <>
    <Textarea
      value={inputValue}
      onChange={(e) => setInputValue(e.target.value)}
      size="sm"
    />
    <Button
      onPress={onAddFeature}
      isIconOnly
      size="sm"
      variant="solid"
      color="primary"
    />
  </>
);
补充说明
  • 受控组件是React表单的标准用法,状态由React统一管理,能避免DOM和状态不一致的问题
  • 如果非要用非受控组件,你可以给TextArea设置defaultValue,但点击按钮时还是建议通过状态更新,或者使用useRef结合current.value的同时确保组件不会因为其他原因重绘(但这种方式不推荐,容易引发其他问题)

内容的提问来源于stack exchange,提问作者Shrikanth Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:58:17