我正在使用es6对象解构为函数提供默认参数。

function mapStateToProps({ shops: { cakeShop: {}, pieShop: {} }) {
  return {
    CakeShopName: shops.cakeShop.Name,
    PieShopName: shops.pieShop.Name
  }
}

上面的问题是,如果我打电话
mapStateToProps({})

该代码抛出Cannot read property 'Name' of undefinedshops上的嵌套对象未设置为其默认值,并且该代码具有空引用。

即使已定义shops本身,如何确保shops中的嵌套对象设置为正确的默认值?

最佳答案

听起来好像您在用默认值混淆解构。您的语法会破坏参数对象,但实际上不会引入任何参数标识符。您的函数范围中没有shops变量。

我假设您实际上想引入cakeShoppieShop变量,并为它们提供默认值。为此,您需要编写

function mapStateToProps({ shops: { cakeShop = {}, pieShop = {} }) {
// short for             { shops: { cakeShop: cakeShop = {}, pieShop: pieShop = {} }) {
// parameter names (that will be bound):      ^^^^^^^^                ^^^^^^^
  return {
    CakeShopName: cakeShop.Name,
    PieShopName: pieShop.Name
  }
}

您可能还会使用
function mapStateToProps({ shops: { cakeShop: {name: CakeShopName} = {}, pieShop: {name: PieShopName} = {} }) {
  return {CakeShopName, PieShopName};
}

07-24 20:39