【问题标题】:destructuring default values in function params解构函数参数中的默认值
【发布时间】:2020-01-10 10:43:11
【问题描述】:

我正在尝试直接在 params 函数中解构值并使用通用对象影响默认值(对于每个被解构的子属性):

例子

const initialTest = {
  name: 'myName',
  surname: 'mySurname',
  age: 100,
};

const MyComponent = ({
   test: { name, surname, age } = initialTest,
}) => { ... }

<MyComponent test={{ name: 'myNameFromProps' }} />

我的最终愿望是拥有 3 个 const namesurnameage,如果它们已定义,则其值来自 props(函数的参数),如果未定义,则值来自 initialTest

使用这段代码,如果test没有在组件的props中定义,它将使用initialTest,但是如果像上面的例子一样只用name props定义测试,我会得到:

name = 'myNameFromProps'
surname undefined
age undefined

我想要:

name = 'myNameFromProps'
surname = 'mySurname'
age = 100

对于 sur,我可以做到:

const MyComponent = ({
   test: { name = initialTest.name, surname = initialTest.surname, age = initialTest.age },
}) => { ... }

但这绝对不好笑……

我用括号 test: ({ name, surname, age } = initialTest), 试过,但不起作用,eslint 说我是一个愚蠢的开发人员......他是对的 xD

如果您有任何建议/想法/解决方案,我很乐意阅读。谢谢大家!

【问题讨论】:

    标签: javascript reactjs destructuring


    【解决方案1】:

    除非您实际上在其他地方使用initialTest,否则您可以将其删除并在test 的解构中列出默认值:

    const MyComponent = ({
       test: { name: 'myName', surname: 'mySurname', age: 100 } = {},
    }) => { ... }
    

    确保在末尾有= {},以防test 属性中不存在任何内容。

    【讨论】:

    • 是的,我知道,但我会在每个组件上将它用于默认有效负载道具,例如 { data, isLoading, errors } =D, thx !
    • 如果你在多个地方使用它,又不想重复,就为它做一个函数。 const myComponent = (arg) =&gt; { const { name, surname, age } = getDefaults(arg);。从技术上讲,您也可以在参数列表中执行此操作,但这会让代码的读者很困惑
    • 是的,我可以做到,但这并不酷 =D 我知道如何解决我的问题,但我想知道是否可以按照我尝试的方式去做,但我不认为所以。我正在阅读每篇关于解构默认值的文章,但我一无所获……我一直在寻找最好的方法,没有技巧。 JS 可以做很多我们忽略的事情 =D 谢谢你的帮助,非常感谢
    猜你喜欢
    • 2017-07-12
    • 2021-03-10
    • 2020-07-21
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多