【前端——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)} />
相关推荐
BD_Marathon18 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
火车叼位19 分钟前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
VT.馒头19 分钟前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
鹏北海20 分钟前
micro-app 微前端项目部署指南
前端·nginx·微服务
发现一只大呆瓜23 分钟前
虚拟列表:从定高到动态高度的 Vue 3 & React 满分实现
前端·vue.js·react.js
css趣多多27 分钟前
add组件增删改的表单处理
java·服务器·前端
证榜样呀32 分钟前
2026 大专计算机专业必考证书推荐什么
大数据·前端
devmoon37 分钟前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
蓝帆傲亦39 分钟前
前端性能极速优化完全指南:从加载秒开体验到丝滑交互
前端·交互
Evand J40 分钟前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop