Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js React |为什么输入的默认值为';没有更新吗?_Node.js_Reactjs_Typescript - Fatal编程技术网

Node.js React |为什么输入的默认值为';没有更新吗?

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

我有一个状态组件,它调用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]
  );
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
好的,我将使用下一个项目,在这方面将创建一个巨大的额外工作来改变。我将搜索另一种方法来更改值!非常感谢。