代码之家  ›  专栏  ›  技术社区  ›  Aessandro

Mobx根据自定义DVR规则做出反应

  •  0
  • Aessandro  · 技术社区  · 8 年前

    我有以下习惯规则( https://foxhound87.github.io/mobx-react-form/docs/validation/modes/dvr-custom.html ):

    const rules: Object = {
        telephone: {
            function: (value: string) => value.match(/^\d{3}-\d{3}-\d{4}$/),
            message: 'The :attribute phone number is not in the format XXX-XXX-XXXX.'
        },
    
        password: {
            function: (value: string) => value.length > 7,
            getValue: value => value,
            message: 'boom boom boom'
        },
    
        confirmPassword: {
            function: (confirmPassword: string) => { console.log(rules.password.getValue()) },
            message: 'Passwords should be equal'
        }
    };
    

    它们被这样使用:

    ...
        {
            name: 'changePassword',
            label: 'Change your password',
            fields: [
                {
                    name: 'password',
                    label: t('user:New pasword'),
                    rules: 'password',
                    value: itemData.passowrd,
                    type: 'password'
                },
                {
                    name: 'confirmPassword',
                    label: t('user:Confirm password'),
                    rules: 'confirmPassword',
                    value: itemData.confirmPassowrd,
                    type: 'password'
                }
            ]
        },
    ...
    

    我试图在confirmPassword规则中获取密码的值,但它似乎无法完成我正在做的工作。它返回undefined。

    1 回复  |  直到 8 年前
        1
  •  0
  •   sashko    7 年前

    如果你使用的是DVR插件,你可以简单地应用 same:attribute 规则:

    {
      name: 'confirmPassword',
      label: t('user:Confirm password'),
      rules: 'same:password',
      value: itemData.confirmPassowrd,
      type: 'password'
    }
    

    或者,您可以使用 custom validation function 这样地:

    {
      name: 'confirmPassword',
      label: t('user:Confirm password'),
      value: itemData.confirmPassowrd,
      type: 'password',
      validators: ({ field, form }) => [
        field.value === form.$('password').value,
        'Passwords do not match.',
      ],
    }