【前端——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)} />
相关推荐
华仔啊6 分钟前
Vue 组件通信的 8 种最佳实践,你知道几种?
前端·vue.js
POLITE310 分钟前
Leetcode 234.回文链表 JavaScript (Day 9)
javascript·leetcode·链表
AC赳赳老秦15 分钟前
政务数据处理:DeepSeek 适配国产化环境的统计分析与报告生成
开发语言·hadoop·spring boot·postgresql·测试用例·政务·deepseek
用户44455436542633 分钟前
Android依赖的统一管理
前端
国家二级编程爱好者33 分钟前
Android Lottie使用,如何自定义LottieView?
android·前端
南囝coding34 分钟前
《独立开发者精选工具》第 025 期
前端·后端
@淡 定35 分钟前
Dubbo + Nacos 完整示例项目
前端·chrome·dubbo
毕设源码-邱学长38 分钟前
【开题答辩全过程】以 基于web的博客论坛系统的设计与实现为例,包含答辩的问题和答案
前端
就叫曲奇饼干吧39 分钟前
前端面试题整理(方便自己看的)
前端·面试
xlxxy_44 分钟前
abap 批量创建供应商
运维·开发语言·sap·abap·pp·mm