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

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

vue table组件实现

vue table组件实现

Vue 表格组件实现方案 基础表格实现 使用<table>标签结合v-for指令渲染数据是最简单的实现方式: <template> <table> &…

vue实现search组件

vue实现search组件

Vue 实现搜索组件 基础实现 创建一个基础的搜索组件需要包含输入框和搜索逻辑。以下是一个简单的实现示例: <template> <div class="search-cont…

vue实现组件市场

vue实现组件市场

Vue 组件市场的实现方法 组件市场的基本架构 Vue 组件市场的核心是构建一个可展示、下载和管理组件的平台。需要设计前端展示界面、后端数据存储和组件打包发布流程。采用 Vue 3 + TypeScr…

vue实现loading组件

vue实现loading组件

Vue 实现 Loading 组件的方法 基础实现方案 创建一个独立的 Loading.vue 组件文件: <template> <div v-if="isLoading" c…