当前位置: 首页 > 面试题库 >

使用“ ...”从现有对象创建新对象时出错:在这种环境下,分配源必须是一个对象

孙光临
2023-03-14
问题内容

在我的React Native应用程序中,我遇到一种情况,即该组件的一个特定子组件render应该收到绿色或红色borderColor

现在,我不想styles为这两种情况在我中创建两个单独的条目,因为它们仅在borderColor属性上有所不同。

我的想法是从我styles喜欢的对象中派生适当的样式对象,如下所示:

const styles = StyleSheet.create({
  amountSection: {
    borderWidth: 1,
    flex: 1,
    flexDirection: 'row',
    borderRadius: 3
  }
})

render() {
  const amountBorderColor = this.state.isClaim ? 'green' : 'red'
  const amountStyles = {
    ...styles.amountSection,
    borderColor: amountBorderColor
  }

  return (
    // ... apply amountStyles at appropriate component
  )
}

但是,此代码给出以下错误:

未处理的JS异常:在这种环境下,Assign的来源必须是一个对象。此错误是性能优化,不符合规范。

显然,错误发生在我定义的行上amountStyles。有人知道为什么会这样吗?我的语法有问题吗?我使用该...符号从现有对象创建一个新对象,并向其添加一些其他属性。


问题答案:

正如@PitaJ指出的那样,我的问题是StyleSheet.create不会返回普通的javascript对象,因此...无法应用运算符。

我也只想为原始问题添加解决方案,那就是从仅添加一个属性的一个基本对象派生两个不同的样式对象。

该文档的StyleSheetAPI表明,该方法flatten可以用于这样的:

const amountBorderColor = this.state.isClaim ? 'green' : 'red'
const amountStyles = StyleSheet.flatten([styles.amountSection, {borderColor: amountBorderColor}])


 类似资料:
  • 问题内容: 可以说我有一个龙目岛注释类 我知道我可以做: 是否有一种简单的方法可以使用现有对象作为模板并更改其属性之一来创建Foo对象? 就像是: 我在lombok文档中找不到此文件。 问题答案: 您可以使用参数为实例提供方法。 从文档中: 如果使用@Builder生成生成器以生成您自己的类的实例(除非将@Builder添加到不返回您自己的类型的方法中,否则通常是这种情况),您可以使用@Build

  • 我试图理解Java8流。我有两门课: 以及: 字段应指示全天的卡路里总量是否为。该字段与当天的所有条目相同。 我试图从

  • 我有Class1类的object1。我想将Class1类扩展到Class2,添加一个方法,然后创建Class2的object2,它在所有方法中的行为都与object1完全相同,只是现在它将有一个额外的方法。 Object1.OldMethod应该具有与Object2.OldMethod完全相同的行为。一个愚蠢的方法是编写一个脚本,用class1继承的100多个方法生成新类: 编辑:很抱歉没有把它说

  • 我是JNI(和java)的新手,所以如果这只是一个愚蠢的错误,我提前道歉。但是,经过大量的搜索,我找不到一个解释或解决办法。 我有一个名为

  • 假设我有一个lombok注释类 我知道我能做到: 类似于: 我在龙目岛的文件里找不到这个。

  • 我对RxJS很陌生,所以如果这个问题已经得到回答,我提前道歉。 我有一个Angular 2应用程序,在其中一个组件中有一个普通对象。我将UI绑定到这个对象。我想做的是能够捕获对这个对象的所有更改,无论它们来自代码还是来自用户更改其中一个字段。 我正在查看可观察对象,但似乎只有通过Emit方法推送新对象时,订阅者才能接收通知。例如,在属性绑定到输入字段的情况下,这将如何工作? 有更好的方法吗? 这是