【前端——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)} />
相关推荐
几何心凉19 小时前
openGauss:多核时代企业级数据库的性能与高可用新标杆
前端·数据库·数据库开发
Yurko1321 小时前
【计网】基于三层交换机的多 VLAN 局域网组建
网络·学习·计算机网络·智能路由器
AiXed21 小时前
PC微信协议之AES-192-GCM算法
前端·数据库·python
月下倩影时21 小时前
视觉进阶篇——机器学习训练过程(手写数字识别,量大管饱需要耐心)
人工智能·学习·机器学习
AllData公司负责人21 小时前
实时开发平台(Streampark)--Flink SQL功能演示
大数据·前端·架构·flink·开源
小满zs1 天前
Next.js第五章(动态路由)
前端
清沫1 天前
VSCode debugger 调试指南
前端·javascript·visual studio code
一颗宁檬不酸1 天前
页面布局练习
前端·html·页面布局
武子康1 天前
Java-171 Neo4j 备份与恢复 + 预热与执行计划实战
java·开发语言·数据库·性能优化·系统架构·nosql·neo4j
zhenryx1 天前
React Native 自定义 ScrollView 滚动条:开箱即用的 IndicatorScrollView(附源码示例)
javascript·react native·react.js·typescript