【前端——bug】使用antd的Input组件无法通过ref修改value

05-14 阅读 0评论

问题背景

我要制作个人博客的chatgpt聊天页面,为了样式统一,我使用了antd的input组件,并且添加了ref属性获取当前输入的内容。我的预期效果是

【前端——bug】使用antd的Input组件无法通过ref修改value,【前端——bug】使用antd的Input组件无法通过ref修改value,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,前端,修改,第1张
(图片来源网络,侵删)
  • 向输入框输入完成后,按下enter,把输入框置空
    const message = ref.current.input.value.trim();
    ref.current.input.value = '';
    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的值

    【前端——bug】使用antd的Input组件无法通过ref修改value,【前端——bug】使用antd的Input组件无法通过ref修改value,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,前端,修改,第2张
    (图片来源网络,侵删)
    const [inputValue, setInputValue] = React.useState('');
    const message = inputValue.trim();
    setInputValue('');
    sendMessage} value={inputValue} onChange={(e) = setInputValue(e.target.value)} />
    
    【前端——bug】使用antd的Input组件无法通过ref修改value,【前端——bug】使用antd的Input组件无法通过ref修改value,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,前端,修改,第3张
    (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]