当前位置:首页 > React

react实现失去焦点事件

2026-01-27 19:46:45React

在 React 中实现失去焦点事件

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

使用原生 onBlur 事件

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

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

使用 useRef 和原生 DOM 事件

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

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 来复用失去焦点的逻辑:

react实现失去焦点事件

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,它们内置了失去焦点的处理逻辑

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

相关文章

jquery事件

jquery事件

jQuery 事件基础 jQuery 提供了一套简化的事件处理机制,允许开发者通过简洁的语法绑定、触发和管理事件。核心方法包括 on()、off()、trigger() 等,支持常见事件(如点击、悬停…

vue 实现hover事件

vue 实现hover事件

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

vue事件如何实现

vue事件如何实现

Vue 事件实现方法 Vue 中事件通过 v-on 指令或 @ 简写实现,支持原生 DOM 事件和自定义事件。 原生 DOM 事件绑定 <button v-on:click="handleCl…

vue中实现长按事件

vue中实现长按事件

监听原生事件实现长按 在Vue中可以通过@mousedown和@touchstart绑定原生事件,配合setTimeout触发长按逻辑。清除定时器使用@mouseup、@mouseleave和@tou…

vue如何实现事件委托

vue如何实现事件委托

Vue 中实现事件委托的方法 事件委托是一种利用事件冒泡机制将子元素的事件处理委托给父元素的优化技术。Vue 中可以通过以下几种方式实现: 使用 v-on 和事件修饰符 通过 v-on 指令在父元素…

vue前端实现双击事件

vue前端实现双击事件

在 Vue 中实现双击事件 Vue 提供了多种方式来实现双击事件,以下是几种常见的方法: 使用 @dblclick 指令 Vue 内置了 @dblclick 指令,可以直接绑定双击事件: <…