Как бы вы добавили add к свойству objects, если оно существует условно с ES6? - PullRequest
0 голосов
/ 27 февраля 2020

Представьте, что существует объект со следующим свойством.

var rules = {
 confirmedPassword: 'required|min:4|max:10',
}

Что мне нужно, это:

rules = { rules.confirmedPassword && {...rules.confirmedPassword, rules.confirmedPassword: '|same:password'}}

Чтобы получить это:

rules = {confirmedPassword: 'required|min:4|max:10|same:password',}

Причина в том, что в ответ я использую event.target в функции для выполнения проверки позже.

Поэтому, если пользователь нажимает на элемент input с помощью name="confirmPassword", он не только будет иметь значение по умолчанию required|min:4|max:10 но на самом деле 'required|min:4|max:10|same:password';

validateInputs(event) {
    var { password, confirmPassword } = this.state;
    var { name, value } = event.target;

    var data = {
      password: password,
      confirmPassword: confirmPassword
    };

    var rules = {};
    rules[name] = 'required|min:4|max:10';

    var messages = {
      'password.min': 'Password is too short.',
      'password.max': 'Password is too long.',
      'confirmPassword.min': 'Password is too short.',
      'confirmPassword.max': 'Password is too long.'
    };

    validate(data, rules, messages)
      .then(feedback => console.log(feedback))
      .catch(errors => console.log('foo', errors));

    this.setState({
      [name]: value
    });
  }

Заранее спасибо!

1 Ответ

0 голосов
/ 27 февраля 2020

Что вы можете сделать, это сохранить свойства в массиве, а затем соединить их и / или удалить их, когда вы go.

Так, например, скажем, у вас есть 4 входа, вы может иметь весь компонент, например, так:

import React from 'react';

export default class TestComponent extends React.Component {
    DEFAULT_RULES = ['required', 'min:4', 'max:10'];

    validateInputs(event) {
        const { password, confirmPassword } = this.state;
        const { name, value } = event.target;

        // This can be done this way in ES6, you don't need to do password: password
        const data = {
            password,
            confirmPassword
        };

        let rules = {};
        const rulesArr = this.DEFAULT_RULES.concat('same:password');
        rules[name] = rulesArr.join('|');

        validate(data, rules, messages)
            .then(feedback => console.log(feedback))
            .catch(errors => console.log('foo', errors));

        this.setState({
            [name]: value
        });
    }
}

Возможно, у меня нет полного контекста, но я надеюсь, что вы понимаете, что здесь происходит

...