我使用了一个钩子,它根据用户输入的邮政编码自动填充我的输入,然后自动填充用户的地址、街道等。
但是,为了自动填充输入,需要重新呈现组件。
由于我的表单是模态的,它会因为渲染而再次打开和关闭。我需要让用户填写邮政编码,输入是实时填写的。
你能帮我一下吗?
- 使用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)}
/>
{...}
1条答案
按热度按时间pnwntuvh1#
也许您可以尝试使用
setValue
方法而不是reset
,因为它将重置表单。https://react-hook-form.com/api/useform/setvalue