【问题标题】:How to avoid destructuring pattern如何避免解构模式
【发布时间】:2017-09-05 05:07:49
【问题描述】:

我注意到我倾向于在解构并返回具有值的对象时执行以下结构。

const { isLoading, fieldValues, stage } = state.personalInformation
return {
  isLoading,
  fieldValues,
  stage,
};

只有三个参数就可以了,但是当我需要传递很多参数时,它会很快变得讨厌。

不解构感觉太冗长了。

return {
  isLoading: state.personalInformation.isLoading,
  fieldValues: state.personalInformation.fieldValues,
  stage: state.personalInformation.stage,
};

有没有办法避免这种模式?

【问题讨论】:

  • 为什么不能直接返回state.personalInformation
  • personalInformation 中有一些字段我不想返回
  • @Ionthas 为什么不让调用者关心使用哪些字段?
  • “这很好,只有三个参数,但是当我需要传递很多参数时” 什么是替代方案,一个对象有多个不同的属性,但不是对象的所有属性,都被引用了吗?

标签: javascript ecmascript-6


【解决方案1】:

如果目标是避免重复属性名称,那么现在唯一的方法就是给自己一个可重用的辅助函数,类似于:

function grab(obj, ...props) {
  const result = {};
  props.forEach(prop => result[prop] = obj[prop]);
  return result;
}

用法:

return grab(state.personalInformation, "isLoading", "fieldValues", "stage");

例子:

var state = {
  personalInformation: {
    isLoading: true,
    fieldValues: "bar",
    stage: 14,
    other: "something"
  }
};
function grab(obj, ...props) {
  const result = {};
  props.forEach(prop => result[prop] = obj[prop]);
  return result;
}
function foo() {
  return grab(state.personalInformation, "isLoading", "fieldValues", "stage");
}
console.log(foo());

(但是有 18 种不同的方法可以旋转 grab 函数,这只是一种方法。)

你也可以有一个grabAllBut,它会复制所有属性除了你列出的那些,因为这是更好的选择......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多