Можно ли использовать деструктуризацию при вызове функции? - PullRequest
0 голосов
/ 09 октября 2018

Я бы хотел использовать деструктуризацию прямо внутри вызова конструктора, например:

signup: async (userInfo) => {
    const user = new User({ email, password, privacyPolicyConsent, username } = userInfo);
}

Но параметры не определены.

Я хочу предотвратить введение нежелательных параметров путем повторной декларации, поэтому я не хочу передавать весь объект следующим образом:

signup: async (userInfo) => {
    const user = new User(userInfo);
}

На данный момент мое рабочее решение выглядит следующим образом:

signup: async (userInfo) => {
    const { email, password, privacyPolicyConsent, username } = userInfo;
    const user = new User({ email, password, privacyPolicyConsent, username });
}

Но у меня было ощущение, что я мог бы написать эту часть лучше.Я что-то пропустил?Любой совет относительно лучших практик приветствуется.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Да, я тоже.

Это то, что я склонен делать (немедленно вызываемая функция):

signup: async userInfo => {
  const user = new User((({ email, password, privacyPolicyConsent, username }) =>
    ({ email, password, privacyPolicyConsent, username })
  ))(userInfo));
}

Он сводит его к одному выражению, но не удаляетпроблема дублированного (и уродливого) кода.


Возможно, для этого могут быть полезны функции:

const dstr = (obj, ...keys) => keys.reduce((o, k) => { o[k] = obj[k]; return o; }, {});

// ...

const user = dstr(userInfo, email, password, privacyPolicyConsent, username);

Или вы можете использовать этот метод Reduction для его создания inline:)

Заинтригован, какие есть альтернативы.

(РЕДАКТИРОВАТЬ) Выше предполагается, что вы не можете предварительно разрушить объект.

0 голосов
/ 09 октября 2018

Вы можете уничтожить его напрямую, как показано ниже:

signup: async ({ email, password, privacyPolicyConsent, username }) => {
    const user = new User(email,password,privacyPolicyConsent,userName);
}
signUp(userInfo);

ОБНОВЛЕНИЕ

Это предотвратит обработку ошибки уничтожения, если она отправлена ​​неопределенной, поэтому вам нужнопроверьте userInfo перед отправкой

if(userInfo) signUp(userInfo);

ОБНОВЛЕНИЕ 2

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

signup: async ({ email, password, privacyPolicyConsent, username }={}) => {
        const user = new User(email,password,privacyPolicyConsent,userName);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...