【发布时间】:2021-01-24 13:24:22
【问题描述】:
我有一个调用 CEP 承诺的有状态组件,用于从邮局获取数据。当 Zip 输入用 9 个字符(8 个数字和一个“-”)完成时获取此数据,并返回一个包含所需信息的对象。
功能如下:
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]
);
然后,在返回时我有一些字段,例如:
<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>
);
};
然而 zipData 似乎已更新,但未满足默认值。我做错了什么?
【问题讨论】:
-
这个输入组件是什么?是你做的,还是来自图书馆?
-
来自图书馆。实际上我正在使用 unform 和 react-input-mask。我编辑添加了 Input 组件。
标签: node.js reactjs typescript