美文网首页ReactReact技术前端大杂烩
使用 React 自动聚焦字段

使用 React 自动聚焦字段

作者: lio_zero | 来源:发表于2022-05-09 01:23 被阅读0次

自动对焦可以让你的应用程序更方便用户使用,有几种方法可以自动聚焦 React 输入框。

要让输入框自动聚焦,最简单的方法是使用 autoFocus 属性(注意大小写):

<input name="username" type="text" autoFocus />

由于该属性在各个浏览器的工作方式不一致,React 内部实现了一个 polyfill,会在元素挂载时使用 focus() 方法。

但这并总是有用,我们需要自己封装一个。

有两种实现方法:

  • 使用 useCallback()
  • 使用 useRef()useEffect()

我们会将它编写成一个 Hooks,以便我们可以在项目中重复使用它。

使用 useCallback()

useCallback() 钩子返回一个已记忆的回调函数。它接受两个参数。第一个是要运行的函数,第二个是运行函数所依赖的值数组。

import { useCallback } from 'react'

const useAutoFocus = () => {
  const inputRef = useCallback((inputElement) => {
    if (inputElement) {
      inputElement.focus()
    }
  }, [])

  return inputRef
}

export default useAutoFocus

注意到 useCallback 的第二个参数是一个空数组,这意味着该函数在组件渲染时只运行一次。

当表单组件渲染时,将设置输入框的引用。它执行 useCallback() 钩子中的函数,该函数对输入框调用 focus()

使用 useRef()useEffect()

useffect() 钩子会告诉 React,在组件渲染之后,您需要组件执行一些操作。它接受两个参数。第一个是要运行的函数,第二个是一个依赖项数组,其功能与 useCallback() 中的相同。

useRef() 钩子对函数组件的作用与 createRef() 对基于类组件的作用相同。这个钩子创建了一个普通的 JavaScript 对象,您可以将其传递给一个元素,以保持对它的引用。可以通过对象的 current 属性访问此引用。

import { useRef, useEffect } from 'react'

const useAutoFocus = () => {
  const inputRef = useRef(null)

  useEffect(() => {
    if (inputRef.current) {
      inputRef.current.focus()
    }
  }, [])

  return inputRef
}

export default useAutoFocus

在上面的代码中,我们创建了对输入框的引用。然后,当组件渲染时,我们使用引用对象的 current 属性调用输入框的 focus()

使用示例:

import { useState, useEffect } from 'react'
import ReactDOM from 'react-dom'
import useAutoFocus from './hooks/useAutoFocus'

function App() {
  const emailInput = useAutoFocus()

  return (
    <>
      <form>
        <label>
          用户
          <input name='username' type='text' ref={emailInput} />
        </label>
        <label>
          密码
          <input name='password' type='password' />
        </label>
        <button type='submit'>登录</button>
      </form>
    </>
  )
}

ReactDOM.render(<App />, document.getElementById('root'))

更多资料

React Hooks

相关文章

  • 使用 React 自动聚焦字段

    自动对焦可以让你的应用程序更方便用户使用,有几种方法可以自动聚焦 React 输入框。 要让输入框自动聚焦,最简单...

  • Django字段类型清单

    Django字段类型清单 AutoField:自动递增的整型字段,添加记录时它会自动增长。通常不需要直接使用这个字...

  • 接口文档标准之枚举

    数据库存储:使用数字编码对接文档字段:使用字母编码Bean中字段:使用枚举类型这样在swagger接口文档中会自动...

  • mybatis-plus自动填充的坑

    使用了mybatis-plus的自动填充功能,字段是使用注解@TableField(value ="updator...

  • 配置less

    因为使用的是TypeScript,而react-scripts-ts 自动配置了一个 create-react-a...

  • git hook定制commit-msg模板并检查必填项

    使用TortoiseGit提交代码,统一提交格式,自动填好字段,并使用客户端钩子检查必填字段。 1、打开Torto...

  • 11.字段类型

    [TOC] 普通字段 AutoField(自增字段) 一个根据实际ID自动增长的的整型字段,默认不需要使用,因为会...

  • homepage的坑

    当使用create-react-app创建项目时候,package.json里面加了homepage的字段,"ho...

  • XORM使用的坑

    xorm使用in : 使用SQL后使用Limit可能不生效,最好使用where 结构体自动忽略空字段在xorm中,...

  • 解决MybatisPlus自动填充字段Column 'u

    问题描述 使用MybatisPlus的字段自动填充功能(FieldFill)时,报错"Column 'update...

网友评论

    本文标题:使用 React 自动聚焦字段

    本文链接:https://www.haomeiwen.com/subject/bcbcurtx.html