reactjs 如何自动设置输入中的值

x759pob2  于 2023-01-04  发布在  React
关注(0)|答案(1)|浏览(116)

我使用了一个钩子,它根据用户输入的邮政编码自动填充我的输入,然后自动填充用户的地址、街道等。
但是,为了自动填充输入,需要重新呈现组件。
由于我的表单是模态的,它会因为渲染而再次打开和关闭。我需要让用户填写邮政编码,输入是实时填写的。
你能帮我一下吗?

    • 使用CEP挂钩:**
import { useState } from 'react'

import { api } from 'services/apiClient'

interface Cep {
  bairro: string
  logradouro: string
  localidade: string
  uf: string
}

export function useCep() {
  const [checkCep, setCheckCep] = useState<Cep>()

  const getCEP = async (e) => {
    const cep = e.target.value.replace(/\D/g, '')

    try {
      const { data } = await api.get(`https://viacep.com.br/ws/${cep}/json/`)

      setCheckCep(data)
    } catch (err) {
      console.log(err)
    }
  }

  return { checkCep, getCEP }
}
    • 组件:**
const { control, formState, register, reset } = useFormContext()

 const { checkCep, getCEP } = useCep()

 useEffect(() => {
    reset({
      responsible: [
        {
          address: checkCep?.logradouro,
          district: checkCep?.bairro,
          city: checkCep?.localidade,
          state: checkCep?.uf,
          name: '',
          email: '',
          student_name: [],
          cep: '',
          residence: '',
          telephone: '',
          sex: ''
        }
      ]
    })
  }, [checkCep])

   <Input
     name="cep"
     type="number"
     label="Cep"
     {...register(`responsible.${index}.cep`)}
     error={errors?.responsible?.[index]?.cep}
     onBlur={(e) => getCEP(e)}
    />
    
   {...}
pnwntuvh

pnwntuvh1#

也许您可以尝试使用setValue方法而不是reset,因为它将重置表单。
https://react-hook-form.com/api/useform/setvalue

相关问题