首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用反应输入掩码与formik和formik- and

使用反应输入掩码与formik和formik- and
EN

Stack Overflow用户
提问于 2019-07-24 20:48:45
回答 1查看 10.8K关注 0票数 3

我将formik@jbuschke/formik-antd结合使用。我需要将掩码+7 (___) ___-__-__应用于输入,所以我想使用react-input-mask

同时,除了+和数字之外,我还需要解析值和删除符号,所以我自己处理onChangesetFieldValue。我可以在控制台日志中获得changedValue,但在提交时,我得到的是初始值,而不是更改后的值。

这是我的代码和演示

代码语言:javascript
复制
const CustomInput = props => (
  <InputMask {...props}>{inputProps => <Input {...inputProps} />}</InputMask>
);

const CloseForm = () => (
  <Formik
    initialValues={{ phone: "" }}
    onSubmit={(values, { setSubmitting }) => {
      setTimeout(() => {
        alert(JSON.stringify(values, null, 2));
        setSubmitting(false);
      }, 400);
    }}
    validate={handleValidate}
  >
    {({ isSubmitting, values, setFieldValue }) => {
      return (
        <Form>
          <FormItem name="phone" label="Phone" required="true">
            <CustomInput
              mask="+7 (999) 999-99-99"
              name="phone"
              onChange={e => {
                const value = e.target.value || "";
                const changedValue = value
                  .replace(/\)/g, "")
                  .replace(/\(/g, "")
                  .replace(/-/g, "")
                  .replace(/ /g, "");
                console.log({ value });
                console.log({ changedValue });
                setFieldValue("phone", value);
              }}
            />
          </FormItem>
          <SubmitButton type="primary" disabled={isSubmitting}>
            Submit
          </SubmitButton>
          <pre>{JSON.stringify(values, null, 2)}</pre>
        </Form>
      );
    }}
  </Formik>
);

怎么能修好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 22:54:46

问题是您解析了值,但没有在任何地方更新它,因此changedValue在作用域的末尾就死了。

将解析转移到onSubmit回调,不仅对每个呈现进行不必要的解析,而且解析值也不需要另一个状态。

提示:使用单个regex表达式,不需要那么多替换。

代码语言:javascript
复制
const CloseForm = () => (
  <Formik
    initialValues={{ phone: '' }}
    onSubmit={(value, { setSubmitting }) => {
      const changedValue = value.phone
        .replace(/\)/g, '')
        .replace(/\(/g, '')
        .replace(/-/g, '')
        .replace(/ /g, '');

      setTimeout(() => {
        alert(JSON.stringify(changedValue, null, 2));
        setSubmitting(false);
      }, 400);
    }}
    validate={handleValidate}
  >
    {({ isSubmitting, values, setFieldValue }) => {
      return (
        <Form>
          <FormItem name="phone" label="Phone" required="true">
            <CustomInput
              mask="+7 (999) 999-99-99"
              name="phone"
              onChange={e => {
                const value = e.target.value || '';
                console.log({ value });
                setFieldValue('phone', value);
              }}
            />
          </FormItem>
          <SubmitButton type="primary" disabled={isSubmitting}>
            Submit
          </SubmitButton>
          <pre>{JSON.stringify(values, null, 2)}</pre>
        </Form>
      );
    }}
  </Formik>
);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57191028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档