当前位置:首页 > React

react实现失去焦点事件

2026-01-27 19:46:45React

在 React 中实现失去焦点事件

在 React 中,可以通过 onBlur 事件处理器来监听元素失去焦点的事件。以下是几种常见的实现方式:

react实现失去焦点事件

使用原生 onBlur 事件

function InputComponent() {
  const handleBlur = () => {
    console.log('Input lost focus');
  };

  return <input type="text" onBlur={handleBlur} />;
}

使用 useRef 和原生 DOM 事件

如果需要更精细的控制,可以使用 useRef 直接访问 DOM 元素:

react实现失去焦点事件

import { useRef } from 'react';

function InputComponent() {
  const inputRef = useRef(null);

  const handleBlur = () => {
    console.log('Input lost focus', inputRef.current.value);
  };

  return <input type="text" ref={inputRef} onBlur={handleBlur} />;
}

在表单组件中使用

失去焦点事件常用于表单验证:

function FormComponent() {
  const [value, setValue] = useState('');
  const [error, setError] = useState('');

  const handleBlur = () => {
    if (!value) {
      setError('This field is required');
    } else {
      setError('');
    }
  };

  return (
    <div>
      <input
        type="text"
        value={value}
        onChange={(e) => setValue(e.target.value)}
        onBlur={handleBlur}
      />
      {error && <div style={{ color: 'red' }}>{error}</div>}
    </div>
  );
}

自定义 Hook 封装

可以创建一个自定义 Hook 来复用失去焦点的逻辑:

function useBlur(initialValue, validationFn) {
  const [value, setValue] = useState(initialValue);
  const [error, setError] = useState('');

  const handleBlur = () => {
    const validationError = validationFn(value);
    setError(validationError);
  };

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

function MyForm() {
  const name = useBlur('', (value) => {
    if (!value) return 'Name is required';
    return '';
  });

  return (
    <div>
      <input type="text" {...name} />
      {name.error && <div style={{ color: 'red' }}>{name.error}</div>}
    </div>
  );
}

注意事项

  • onBlur 事件会在元素失去焦点时触发,比 onChange 更适合用于表单验证
  • 如果需要阻止默认行为,可以使用 event.preventDefault()
  • 在 React 中,onBlur 是合成事件,与原生 DOM 的 blur 事件行为一致
  • 对于复杂的表单,可以考虑使用表单库如 Formik 或 React Hook Form,它们内置了失去焦点的处理逻辑

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

相关文章

vue 实现hover事件

vue 实现hover事件

在Vue中实现hover事件可以通过多种方式完成,以下是常见的几种方法: 使用@mouseenter和@mouseleave指令 Vue提供了原生的事件监听指令,可以直接在模板中绑定鼠标进入和离开的…

jquery添加事件

jquery添加事件

jQuery 添加事件的方法 jQuery 提供了多种方法来为元素添加事件监听。以下是一些常用的方式: 使用 .on() 方法 .on() 是 jQuery 中推荐的事件绑定方法,支持直接绑定和委托…

vue实现事件代理

vue实现事件代理

事件代理的概念 事件代理(Event Delegation)是一种利用事件冒泡机制,将子元素的事件委托给父元素统一处理的技术。在Vue中,可以通过v-on指令或$on方法实现事件代理,减少事件监听器的…

vue实现activeX事件

vue实现activeX事件

在 Vue 中实现 ActiveX 事件 在 Vue 项目中集成 ActiveX 控件并监听其事件,可以通过以下步骤完成。ActiveX 控件通常用于嵌入浏览器中的特定功能(如旧版 IE 支持的插件)…

vue怎么实现事件嵌套

vue怎么实现事件嵌套

事件嵌套的实现方法 在Vue中实现事件嵌套通常涉及在父组件中监听子组件的事件,或在同一组件内处理多个事件的联动。以下是几种常见场景的解决方案: 父子组件间事件嵌套 父组件通过v-on监听子组件触发的…

vue实现点击单选事件

vue实现点击单选事件

Vue 实现点击单选事件的方法 在 Vue 中实现单选功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以轻松实现单选功能…