繁体   English   中英

反应 - 使用键名从父 object 中删除子 object

[英]React - Delete child object from parent object using key name

我正在尝试从父 object 中过滤掉不需要的对象
但是我被抛出一个TypeError: Cannot delete property 'children' of #<Object>


像这样传递的道具:

<Column df={["between", "mt-0", "around"]} xl={["center"]}>...</Column>

给一个实用程序 function 像这样:

const Column = props => {
  const x = filterComponentProps(props)
  return stuff
}

实用程序 function 内部的任何 object 在const condition = ["df", "xl"]中不匹配的内容都将被删除。

export const filterComponentProps = props => {
  let data = props
  console.log(data) 
  // {df: Array(3), xl: Array(1), children: Array(6)}
  // children: (6) [{…}, {…}, {…}, {…}, {…}, {…}]
  // df: (3) ["between", "mt-0", "around"]
  // xl: ["center"]

  const condition = ["df", "xl"]
  Object.keys(data).forEach(key =>
    !condition.includes(key) ? delete data[key] : key
  ) //ERROR 
  return data
}

我设置了一个测试,看看它是否与 function 有问题,但它按预期工作:

const data = {
  df: { name: "Part 1", size: "20", qty: "50" },
  xl: { name: "Part 2", size: "15", qty: "60" },
  children: { name: "Part 2", size: "15", qty: "120" },
}

const condition = ["df", "xl"]

Object.keys(data).forEach(key =>
  !condition.includes(key) ? delete data[key] : key
)

console.log(data)
//{df: {…}, xl: {…}}
//df: {name: "Part 1", size: "20", qty: "50"}
//xl: {name: "Part 2", size: "15", qty: "60"}

您收到此错误是因为您尝试修改已冻结的 object。 如果您尝试以下操作

const data = Object.freeze({
  df: { name: "Part 1", size: "20", qty: "50" },
  xl: { name: "Part 2", size: "15", qty: "60" },
  children: { name: "Part 2", size: "15", qty: "120" },
})

你得到同样的错误。 让我知道是否清楚。

像这样解构道具,

let data = {...props};

创建道具的浅表副本,现在循环数据并删除您想要的属性,

export const filterComponentProps = props => {
  let data = {...props};     // shallow copy
  const condition = ["df", "xl"]
  Object.keys(data).forEach(key =>
    !condition.includes(key) ? delete data[key] : key
  )
  return data;
}

试试这个,它会工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM