【前端——bug】使用antd的Input组件无法通过ref修改value

问题背景

我要制作个人博客的chatgpt聊天页面,为了样式统一,我使用了antd的input组件,并且添加了ref属性获取当前输入的内容。我的预期效果是

  • 向输入框输入完成后,按下enter,把输入框置空
javascript 复制代码
const message = ref.current.input.value.trim();
ref.current.input.value = '';

<Input type="text" ref={ref} className={styles.userInput} placeholder="Type a message..."  onPressEnter={sendMessage} />

这里有一个坑就是,antd的input组件时封装html的,所以不能简单通过ref.current.value获取当前的内容,要再加一个input。

以上实践后发现,我enter后确实置空了,但是我对input框失焦或者再次点击后,值又回到上一次enter前的值

思考

- antd Input不要直接通过ref修改,因为当值发生改变时,必须在onChange中通过useState改变值,然后引发组件的重新渲染(可以使用ref来访问input元素,而改变ref的current属性的值时,不会导致重新渲染)

https://github.com/ant-design/ant-design/issues/18030

https://juejin.cn/post/7165804525431832612

解决办法

使用hooks来更新input的值

javascript 复制代码
const [inputValue, setInputValue] = React.useState('');
const message = inputValue.trim();
setInputValue('');

<Input type="text" placeholder="Type a message..."  onPressEnter={sendMessage} value={inputValue} onChange={(e) => setInputValue(e.target.value)} />
相关推荐
C+-C资深大佬2 分钟前
C++数据类型
开发语言·c++·算法
ID_180079054737 分钟前
日本乐天商品详情API接口的请求构造与参数说明
开发语言·python·pandas
代码游侠9 分钟前
复习——ARM Cortex-A 裸机开发深度解析
arm开发·笔记·嵌入式硬件·学习·架构
派大鑫wink14 分钟前
【Day34】Servlet 进阶:会话管理(Cookie vs Session)
java·开发语言·学习方法
小+不通文墨24 分钟前
“示波器的调节和使用”实验报告
经验分享·笔记·学习·学习方法
猫天意27 分钟前
【深度学习小课堂】| torch | 升维打击还是原位拼接?深度解码 PyTorch 中 stack 与 cat 的几何奥义
开发语言·人工智能·pytorch·深度学习·神经网络·yolo·机器学习
鸢尾掠地平28 分钟前
如何制作一个简单的学习教务系统?
css·学习·css3
AKA__老方丈36 分钟前
vue-cropper图片裁剪、旋转、缩放、实时预览
前端·vue.js
crossaspeed41 分钟前
Java-线程池(八股)
java·开发语言
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][base]cpu
linux·笔记·学习