我想在这样的构造函数调用中使用解构:
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 });
}
但是我觉得我可以用更好的方式写这部分。我错过了什么?任何有关最佳做法的建议都值得赞赏。
答案 0 :(得分:4)
您可以像下面这样直接销毁它
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);
}
答案 1 :(得分:0)
哦,我也会。
这就是我倾向于做的(立即调用的函数):
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);
或者您可以使用那种reduce方法来内联创建它:)
好奇有什么替代品。
(编辑)以上假设您无法预先破坏对象。