【前端——bug】使用antd的Input组件无法通过ref修改value
Everglowwwwww 2024-08-19 10:33:01 阅读 57
问题背景
我要制作个人博客的chatgpt聊天页面,为了样式统一,我使用了antd的input组件,并且添加了ref属性获取当前输入的内容。我的预期效果是
向输入框输入完成后,按下enter,把输入框置空
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的值
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)} />
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。