当前位置: 首页 > 知识库问答 >
问题:

反应:无法添加属性“X”,对象不可扩展

廖诚
2023-03-14

我在我的组件中接收道具。我想在此组件中添加一个带有道具的属性“LegendPosition”。我不能那样做。请帮我做这个。我已经尝试过此代码,但没有成功:

var tempProps     = this.props;
tempProps.legendPosition = 'right';
Object.preventExtensions(tempProps);

console.log(tempProps);

共有3个答案

穆彬郁
2023-03-14

我想把更新的道具发送到一个子组件,如果不复制或克隆到一个新对象是可能的,请帮助我如何实现这一点。

解决方案简单如:

<ChildComponent {...this.props} legendPosition="right" />

当然,legendPosition将通过this在ChildComponent中提供。道具。legendPosition

当然,前面的是这样的。道具可以包含已存在的legendPosition属性/值,这些属性/值将被以后定义的顺序事项覆盖。

当然,可以有许多扩展运算符——对于多个属性、逻辑块...无论什么:

const additonalProps = {
  legendPosition: 'right',
  sthElse: true
}
return (
  <ChildComponent {...this.props} {...additonalProps} />
)
阴飞星
2023-03-14

道具是不可变的,你不能“添加”任何东西。如果你想“复制”它们,那么你需要这样做

const tempProps = {...this.props};

我能看到你需要添加更多道具的唯一原因是把它传递给一个孩子,但是你可以不把它添加到道具对象中。

编辑:添加道具与额外的道具

<Component {...this.props} legendPosition="right" />
龙霖
2023-03-14

您不能修改this.props。这里temPropsthis.props的引用,所以它不起作用。您应该使用JSON. parse()和JSON. stringify()创建一个props的副本

var tempProps = JSON.parse(JSON.stringify(this.props));
tempProps.legendPosition = 'right';
Object.preventExtensions(tempProps);

console.log(tempProps);

为了更好和有效的方法来深度克隆对象,请参阅JavaScript中深度克隆对象的最有效方法是什么?

 类似资料:
  • 问题内容: 我要返回一个Mongoose文档,并希望在发送之前向其中添加一些元数据。但是,我无法添加任何属性,我不确定为什么。我检查了它是否可以使用Object.isExtensible(doc)扩展。 可能是什么问题? 问题答案: 啊..我的对象是一个Mongoose文档,不允许添加属性。解决方案是将返回的文档转换为普通对象,或者在查询中调用lean()。

  • 问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程

  • 问题内容: 我正在用babel和webpack编写React应用程序。一直到我尝试在类上添加属性之前,它一直运行得很好-特别是尝试使用React- Toolbox(http://react-toolbox.com/#/components/dropdown)中的Dropdown 并暂时数据连接后,我直接复制了此内容: 这是我的稍作修改的版本: 添加对象后,在webpack:中,在“ state =

  • 问题内容: 嗨:在我们的应用程序中,我们已经从数据库中检索了一些数据,例如,表中包含以下字段:id,名称,年龄,地址,电子邮件。 然后,我们将根据客户提供一些这些属性。 如果客户需要ID,名称,我们将获得ID名称;如果客户需要ID,名称,年龄,则将获得ID,名称,年龄。 现在,我们想创建一个包装这些属性的类。但是,我们不知道确切要求哪个字段。 我可以在这里用Class替换地图吗? 问题答案: 如果

  • 您好,我有一个小问题要理解打字稿以及如何创建具有属性的对象。 我不明白我怎么能创建一个对象,并在创建后添加一些值。 我读了许多博客,有可能的解决方案,但没有任何工作。我得到的只是“无法设置未定义的属性‘书名’”。 我已经试过这个解决方案了。类型脚本和字段初始值设定项 如何在TypeScript中基于接口文件定义创建对象? 在打字稿中如何修复无法设置未定义的属性“第一” 至少我知道,我还没有完全理解

  • 问题内容: 考虑以下代码示例: 从PHP 5.3开始,这将产生(类似)以下输出: 但是下面的代码: …仅发出错误: 为什么将这些属性“添加”到对象?请注意,它们没有定义为手册页DateTime`上的类的一部分。 问题答案: 发生了一些魔术,但这很简单。 DateTime类没有您要访问的公共变量“date”。但是,作为PHP工作方式的副作用,在该类上调用print_r或var_dump时会创建一个变