【问题标题】:cannot read property of undefined using default value无法使用默认值读取未定义的属性
【发布时间】:2021-12-18 13:40:27
【问题描述】:

我有一个模型可以获取一些数据和过滤器。当应用程序启动时,我希望所有过滤器都等于true。我设置了默认值,但仍然出现以下错误。

const model = (data, predictions, { placeFilter = true, startDateFilter = true, endDateFilter = true }) => {
   const getData = () => data.filter(placeFilter).filter(startDateFilter).filter(endDateFilter)
}
TypeError: Cannot read properties of undefined (reading 'placeFilter')
    at model (model.js:1)
    at init (index.js:15)

【问题讨论】:

  • 你必须给对象命名

标签: javascript reactjs function default-value


【解决方案1】:
const model = (data, predictions, { placeFilter = true, startDateFilter = true, endDateFilter = true }) => {
   const getData = () => data.filter(placeFilter).filter(startDateFilter).filter(endDateFilter)
}

你不能通过像model([], [])这样的两个参数来调用上面的model函数,因为JavaScript会尝试解构第三个参数undefined

您可以这样做:

const model = (data, predictions, { placeFilter = true, startDateFilter = true, endDateFilter = true } = {}) => {
  console.log(placeFilter, startDateFilter, endDateFilter)
}

model([], [])
model([], [], { placeFilter: false })

顺便说一句,假设 data 是一个数组,并且您尝试使用 Array.prototype.filter,则应使用返回布尔值的回调函数调用 filter,但您直接将布尔值传递给所有过滤器。

【讨论】:

  • 是的,最后一段是我现在要解决的问题
  • placeFilter = () => true 这个可行
【解决方案2】:

您的参数可以命名为访问默认值

const model = (data, predictions, filter = { placeFilter: true, startDateFilter: true, endDateFilter:  true }) => {
   const getData = () => data.filter(filter.placeFilter).filter(filter.startDateFilter).filter(filter.endDateFilter)
}

【讨论】:

    【解决方案3】:

    const model = (data, predictions, { placeFilter = true, startDateFilter = true, endDateFilter = true } = {}) => {
      const getData = () => data.filter(placeFilter).filter(startDateFilter).filter(endDateFilter)
    }

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2020-12-13
    • 2023-03-11
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多