【问题标题】:Unfocus input after submit useForm() in React project在 React 项目中提交 useForm() 后取消焦点输入
【发布时间】:2022-06-10 20:21:17
【问题描述】:

见鬼去吧!

在我的 React 项目中,我得到了一些输入,其中扫描了一些裸码值。我正在使用 react-hook-form 和 useForm Hook。 我在一个全局表单中有一些小表单(一个输入文本和一个提交按钮),我想要一个自动化,当我在键盘上按“Enter”时,一个动作/事件会发送一些获取或其他。

使用 and {handleSubmit} = useForm() ,它工作得很好,但是我的输入保持集中,我需要失去这个焦点......

那么,我该怎么做呢?我看到了 blur() 函数,但我没有成功从 handleSubmit 函数中定位我的输入

import {Controller, useForm} from "react-hook-form"

const BasketContainer: FC = () => {

const { control, handleSubmit, setValue, watch, getValues, reset, formState: {errors}} = useForm<Basket>()


const handleScanIdSubmit = (data: any) => {
    // Here my blur action
  }

return (
  <form onSubmit={handleSubmit(handleScanIdSubmit)}>
          <Controller
            render={({field: {ref, ...rest}}) => (
              <InputText  {...rest}
                          type={"text"}
                          label={"ID"}
                          errorMessage={errors.scanId.message}
              />)}
            control={control}
            name="scanId"
            defaultValue={""}
            rules={{required: "Field required"}}
          />

          <Button type="submit"     
          />
            
        </form>

提前感谢您的帮助:)

【问题讨论】:

    标签: reactjs typescript forms react-hook-form react-typescript


    【解决方案1】:

    您可以通过在活动元素上调用blur() 以传统方式完成此操作。

    const handleScanIdSubmit = (data: any) => {
       document.activeElement.blur();
    }
    

    或者您可以使用useRef 创建引用;

    import {Controller, useForm, useRef} from "react-hook-form"
    
    const BasketContainer: FC = () => {
      const controlReference = useRef(null);
      const { control, handleSubmit, setValue, watch, getValues, reset, formState: {errors}} = useForm<Basket>();
      const handleScanIdSubmit = (data: any) => {
        controlReference.current.blur();
      }
      return (
        <form onSubmit={handleSubmit(handleScanIdSubmit)}>
          <Controller
            render={({field: {ref, ...rest}}) => (
              <InputText  {...rest}
                type={"text"}
                label={"ID"}
                ref={controlReference}
                errorMessage={errors.scanId.message}
              />)}
            control={control}
            name="scanId"
            defaultValue={""}
            rules={{required: "Field required"}}
          />
          <Button type="submit"/>
        </form>
      );
    }
    

    【讨论】:

    • 感谢您,使用解决方案 1,它可以工作,但我收到警告“'元素'类型上不存在属性'模糊'”我正在尝试解决方案 2
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2012-06-18
    • 2022-01-16
    • 2020-06-03
    • 2017-08-23
    • 1970-01-01
    • 2016-03-13
    • 2013-01-13
    相关资源
    最近更新 更多