React hooks使用
我想在input输入框中按Enter
直接提交输入类容(调用一个外部dispatch),然后再清空输入框,但是现在的结果是,可以清空输入框,但是在handlePress
函数里面死活获取不到name,每次的值都是''
。如果把name
添加到useEffect
的依赖,又会重复添加事件绑定,并且handlePress
函数也会多次执行。
我尝试用useCallback
包裹handlePress
函数也无济于事,到底怎样才能实现我想要的效果呢
const Input = ({ addName }) => {
const [name, setName] = useState('');
const inputRef = React.createRef();
const handlePress = e => {
if (e.key === 'Enter') {
console.log('name:', name);
addName({ name });
setName('');
}
};
useEffect(() => {
inputRef.current?.addEventListener('keydown', e => handlePress(e));
return () => {
inputRef.current?.removeEventListener('keydown', e => handlePress(e));
};
}, []);
return (
<div className='input-wrap'>
<input
ref={inputRef}
value={name}
type='text'
className='input'
placeholder='Please input your something'
onChange={e => setName(e.target.value)}
/>
</div>
);
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
方法1,将handlePress作为input的属性传入,将其接入组件的更新流程,此时react会保证handlePress闭包内捕获的name始终是最新值
方法2,手动用ref保存最新的handlePress然后通过他调用handlePress
需要添加依赖项