reactjs - React Formik Mui TextField 与自定义输入失去焦点
问题描述
我有一个 Formik 表单,其中包含一些 Material UI TextField 组件。所有这些都工作正常,除了执行 onChange() 时失去焦点的人。它有一个 PhoneInput (react-phone-number-input) 组件作为自定义输入。一切正常(正在保存数据等),但我必须继续单击输入以继续写入。
我觉得这与裁判有关。记录 inputRef(PhoneInputRef,由 TextField 提供)时,它看起来不像普通的 ref。
Formik 组件(父级)
{...}
<Formik
initialValues={initialValues}
validationSchema={validationSchema}
onSubmit={handleClickRegister}>
{(props) => <RegisterForm {...props} />}
</Formik>
{...}
表格(儿童)
{...}
const {
values: {
firstName,
lastName,
email,
confirmEmail,
password,
confirmPassword,
phoneNumber,
},
//Formik methods passed as props
errors,
touched,
handleChange,
handleSubmit,
setFieldValue,
setFieldTouched,
} = props;
{...}
//Formik onChange handler (used by every TextField besides the one containing PhoneInput)
const change = (name, e) => {
e.persist();
handleChange(e);
setFieldTouched(name, true, false);
};
//Custom onChange handler for Formik (used by PhoneInput)
const handleOnChange = (name, value) => {
setFieldValue(name, value);
setFieldTouched(name, true, false);
};
{...}
{/*NORMAL TEXTFIELD*/}
<TextField
className={classes.inputField}
id="confirmPassword"
name="confirmPassword"
label={t("header.registerDialog.form.labelConfirmPassword")}
value={confirmPassword}
onChange={change.bind(null, "confirmPassword")}
error={touched.confirmPassword && Boolean(errors.confirmPassword)}
helperText={
touched.confirmPassword && errors.confirmPassword ? (
errors.confirmPassword
) : (
<>
<br />
</>
)
}
/>
{/*CUSTOM INPUT TEXTFIELD*/}
<TextField
className={classes.textFieldPhoneInput}
key="textFieldPhone"
ref={textFieldRef}
id="phoneNumber"
name="phoneNumber"
label={t("header.registerDialog.form.labelPhone")}
InputLabelProps={{
className: phoneNumber
? classes.inputFieldPhoneLabel
: classes.inputFieldPhoneLabelEmpty,
}}
InputProps={{
inputComponent: ({ inputRef, ...rest }) => (
<PhoneInput
{...rest}
key="phoneInput"
ref={inputRef}
international
countryCallingCodeEditable={false}
name="phoneNumber"
defaultCountry="AR"
onChange={(phone) =>
handleOnChange("phoneNumber", phone)
}
labels={phoneLanguage}
value={phoneNumber}
/>
),
}}
error={touched.phoneNumber && Boolean(errors.phoneNumber)}
helperText={
touched.phoneNumber && errors.phoneNumber ? (
errors.phoneNumber
) : (
<>
<br />
</>
)
}
/>
{...}
解决方案
推荐阅读
- python - 命令“python manage.py startapp (nameofapp)”不起作用
- java - 无法解决heroku中项目的依赖关系
- ionic3 - 导入模块时出现 Ionic 3 路径错误
- python - Python 3.6 及更早版本的精确时间(以纳秒为单位)?
- dart - 左对齐可滚动标签
- api - Xtream代码2.9.2如何使用Apis查看行?
- laravel-5.7 - 如何从具有多个用户数据的数据库中仅获取特定用户的数据 laravel
- python - 使用 lower() 进行不区分大小写的字典检查
- automated-tests - Botium 部分 convos 实际上并没有将对话发送到聊天机器人
- python - 如何在 Python 中返回整个字符串并从中提取一列?