当前位置:首页 > 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实现长按事件

vue实现长按事件

实现长按事件的几种方法 在Vue中实现长按事件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生事件监听 通过@mousedown和@mouseup或@touchstart和@touche…

vue 实现hover事件

vue 实现hover事件

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

uniapp事件介绍

uniapp事件介绍

uniapp事件介绍 uniapp中的事件系统基于Vue.js的事件机制,允许开发者在组件间进行通信或响应用户交互。以下是uniapp中常见的事件类型和使用方法。 事件绑定与触发 在uniapp中,…

vue实现事件监听

vue实现事件监听

Vue 事件监听实现方法 Vue 提供了多种方式实现事件监听,涵盖组件内外交互、原生 DOM 事件处理等场景。以下是核心实现方案: 模板内直接监听 通过 v-on 或 @ 语法监听 DOM 事件:…

vue 实现事件委托

vue 实现事件委托

Vue 中实现事件委托的方法 事件委托是一种通过将事件监听器绑定到父元素而非子元素的技术,利用事件冒泡机制统一处理子元素的事件。Vue 中可以通过以下方式实现: 1. 使用 v-on 和事件修饰符…

vue事件循环实现

vue事件循环实现

Vue 的事件循环实现 Vue 的事件循环机制主要依赖于 JavaScript 的原生事件循环(Event Loop),并结合 Vue 自身的响应式系统和异步更新队列机制。以下是 Vue 事件循环的核…