【前端——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)} />
相关推荐
XiaoSong几秒前
React useState 原理和异步更新
前端·react.js
徐徐子几秒前
从vue3 watch开始理解Vue的响应式原理
前端·vue.js
拾荒的小海螺3 分钟前
开源项目:Three.js 构建 3D 世界的工具库
javascript·3d·开源
眯眼因为很困啦4 分钟前
GitHub Fork 协作完整流程
前端·git·前端工程化
whisper7 分钟前
🚀 React Router 7 + Vercel 部署全指南
前端
还债大湿兄16 分钟前
huggingface.co 下载有些要给权限的模型 小记录
开发语言·前端·javascript
叶落无痕5216 分钟前
Electron应用自动化测试实例
前端·javascript·功能测试·测试工具·electron·单元测试
bkspiderx28 分钟前
C++中的map容器:键值对的有序管理与高效检索
开发语言·c++·stl·map
Hard but lovely29 分钟前
Linux: 线程同步-- 基于条件变量 &&生产消费模型
linux·开发语言·c++
H@Z*rTE|i33 分钟前
elementUi 当有弹窗的时候提示语被覆盖的问题
前端·javascript·elementui