当前位置:首页 > React

react组件实现失去焦点

2026-01-27 17:30:20React

实现 React 组件失去焦点的方法

使用 onBlur 事件
在输入元素上绑定 onBlur 事件,当元素失去焦点时触发回调函数。这是最直接的方式:

<input 
  onBlur={(e) => console.log('失去焦点', e.target.value)} 
/>

结合 useState 管理状态
通过状态存储输入值,在失去焦点时处理数据:

const [inputValue, setInputValue] = useState('');
const handleBlur = () => {
  console.log('最终值:', inputValue);
};

return (
  <input 
    value={inputValue}
    onChange={(e) => setInputValue(e.target.value)}
    onBlur={handleBlur}
  />
);

自定义 Hook 封装逻辑
可复用逻辑抽离为自定义 Hook:

function useBlurHandler(initialValue, callback) {
  const [value, setValue] = useState(initialValue);
  const handleBlur = () => callback(value);

  return {
    value,
    onChange: (e) => setValue(e.target.value),
    onBlur: handleBlur
  };
}

// 使用示例
const inputProps = useBlurHandler('', (val) => console.log(val));
return <input {...inputProps} />;

处理动态生成的元素
对于动态渲染的组件,可通过 useRef 绑定事件:

const inputRef = useRef();
useEffect(() => {
  const current = inputRef.current;
  current.addEventListener('blur', () => console.log('blur'));
  return () => current.removeEventListener('blur');
}, []);

return <input ref={inputRef} />;

表单整体失去焦点验证
在表单提交时检查所有字段的失焦状态:

react组件实现失去焦点

const formRef = useRef();
const handleSubmit = () => {
  const inputs = formRef.current.querySelectorAll('input');
  inputs.forEach(input => input.blur()); // 强制失焦触发验证
};

注意事项

  • 移动端需测试 onBluronTouchEnd 的兼容性
  • 避免在 onBlur 中同步触发会重新聚焦的操作(如弹出模态框)
  • 复杂场景可考虑使用 Formik 或 React Hook Form 库的失焦验证机制

标签: 组件焦点
分享给朋友:

相关文章

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue穿梭框组件实现

vue穿梭框组件实现

实现 Vue 穿梭框组件的基本思路 穿梭框(Transfer)组件通常用于在两个列表之间移动数据项。核心功能包括左侧列表、右侧列表、移动按钮(左移、右移、全选等)以及数据项的渲染与交互。 基础结构设…

vue实现组件跟随

vue实现组件跟随

Vue 实现组件跟随效果 实现组件跟随效果通常需要监听鼠标或触摸事件,动态更新组件位置。以下是几种常见实现方式: 使用鼠标事件绑定 <template> <div class=…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pagina…

vue实现默认焦点

vue实现默认焦点

Vue 实现默认焦点的方法 在 Vue 中实现默认焦点可以通过多种方式完成,以下是几种常见的方法: 使用 autofocus 属性 在 HTML5 中,autofocus 属性可以让元素在页面加载时…

vue实现树组件

vue实现树组件

Vue 树形组件的实现方法 递归组件实现 使用 Vue 的递归组件特性可以轻松实现树形结构。定义一个组件,该组件能够调用自身来渲染子节点。 <template> <ul>…