Node.js React |为什么输入的默认值为';没有更新吗?
我有一个状态组件,它调用CEP承诺,从邮局获取数据。当Zip输入使用9个字符-8个数字和一个“-”完成时,将获取该数据,并返回一个包含所需信息的对象 功能如下:Node.js React |为什么输入的默认值为';没有更新吗?,node.js,reactjs,typescript,Node.js,Reactjs,Typescript,我有一个状态组件,它调用CEP承诺,从邮局获取数据。当Zip输入使用9个字符-8个数字和一个“-”完成时,将获取该数据,并返回一个包含所需信息的对象 功能如下: const handleZipCode = useCallback( async ({ target }: ChangeEvent<HTMLInputElement>) => { const { value } = target; try { if (value.l
const handleZipCode = useCallback(
async ({ target }: ChangeEvent<HTMLInputElement>) => {
const { value } = target;
try {
if (value.length === 9 && isDigit(value[8])) {
const zip = await cep(value);
if (zip?.city) {
setZipData(zip);
} else
addressFormRef.current?.setErrors({
user_zip_code: 'CEP not found',
});
}
} catch (e) {
addressFormRef.current?.setErrors({
user_zip_code: e.message ?? 'CEP not found',
});
}
},
[isDigit]
);
const handleZipCode=useCallback(
异步({target}:ChangeEvent)=>{
常量{value}=目标;
试一试{
if(value.length==9&&isDigit(值[8])){
const zip=等待cep(值);
如果(邮编?.city){
setZipData(zip);
}否则
addressFormRef.current?设置错误({
用户邮政编码:“找不到CEP”,
});
}
}捕获(e){
addressFormRef.current?设置错误({
用户邮政编码:e.message???“找不到CEP”,
});
}
},
[isDigit]
);
然后,在返回时,我有一些字段,例如:
<fieldset>
<legend>Address</legend>
<Input
mask=''
name='user_address'
placeholder='Rua um dois três'
defaultValue={zipData.street}
/>
</fieldset>
地址
以下是输入组件:
const Input: React.FC<InputProps> = ({ name, ...rest }) => {
const { fieldName, defaultValue, registerField, error } = useField(name);
const inputRef = useRef(null);
useEffect(() => {
registerField({
name: fieldName,
ref: inputRef.current,
path: 'value',
// eslint-disable-next-line
setValue(ref: any, value: string) {
ref.setInputValue(value);
},
// eslint-disable-next-line
clearValue(ref: any) {
ref.setInputValue('');
},
});
}, [fieldName, registerField]);
return (
<Container>
<ReactInputMask ref={inputRef} defaultValue={defaultValue} {...rest} />
{error && <Error>{error}</Error>}
</Container>
);
};
const输入:React.FC=({name,…rest})=>{
const{fieldName,defaultValue,registerField,error}=useField(name);
const inputRef=useRef(null);
useffect(()=>{
注册表字段({
名称:fieldName,
参考:输入电流,
路径:“值”,
//eslint禁用下一行
设置值(参考:任意,值:字符串){
参考setInputValue(值);
},
//eslint禁用下一行
clearValue(参考:任何){
参考setInputValue(“”);
},
});
},[fieldName,registerField]);
返回(
{error&&{error}
);
};
但是,zipData似乎会更新,但未满足默认值。我做错了什么?默认值不会更改,因为
unform
是一个不受控制的表单库,默认值将在页面的第一次呈现时设置,然后不再更改
要解决您的问题,您可以执行以下操作:
//在handleZipCode函数上
formRef.current.setData({
zipData:{
街道:Zippresult.街,
},
});
默认值不会更改,因为unform
是一个不受控制的表单库,默认值将在页面的第一次呈现时设置,然后不再更改
要解决您的问题,您可以执行以下操作:
//在handleZipCode函数上
formRef.current.setData({
zipData:{
街道:Zippresult.街,
},
});
这个输入组件是什么?是你做的,还是从图书馆来的?是从图书馆来的。实际上,我使用的是unform和react输入掩码。我编辑添加了输入组件。这个输入组件是什么?是你做的,还是从图书馆来的?是从图书馆来的。实际上,我使用的是unform和react输入掩码。我编辑添加了输入组件。我得到了这个错误:ref.setInputValue不是一个函数
。你难道没有忘记当前的吗?一个已知的问题可能是:是的,tbh我一点都不喜欢UNFM,我推荐你reac hooks form
好的,我将使用的下一个项目,在这方面将创建一个需要更改的巨大额外工作。我将搜索另一种方法来更改值!非常感谢。我得到了这个错误:ref.setInputValue不是一个函数
。你难道没有忘记当前的吗?一个已知的问题可能是:是的,tbh我一点都不喜欢UNFM,我建议你reac hooks form
好的,我将使用下一个项目,在这方面将创建一个巨大的额外工作来改变。我将搜索另一种方法来更改值!非常感谢。