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

reactjs中的扩展语法"...this.props"感觉很奇怪

陈斌蔚
2023-03-14

在JSX中使用spread操作符react处理props之类的对象似乎无法输出我所期望的结果。

<Text {...this.props} />

似乎被渲染为style=“foo”,其中应该是style:“foo”,如本文所述。我在任何地方都找不到这个文件。我对react完全是新手,我试图理解它的语法,想知道react是否在内部做了类似这样的未记录的事情。

一个简单的测试突显了我的困惑:

const x = {...{test:1}}.test;
alert(x);

警报了

1.

这肯定不会编译:

<Text test: 1 />

共有2个答案

程振濂
2023-03-14

解构从对象中提取键值对。

看看这个例子

const obj = {
  a: 'a',
  b: 'b'
}

现在,解构obj将导致

const { a, b } = obj;
console.log(a);  // 'a'
console.log(b);  // 'b'

如果您在将对象作为React Component的道具传递时对其进行了重构,则会发生以下情况

<Component {...obj} />

这将在内部转换为

<Component a={a} b={b} />

因此,如果要将样式作为道具传递给组件,则应按照以下步骤进行传递:

const style = {
  background:'yellow'
} 

<Component style={style} />

const obj = {
  style = {
      background:'yellow'
    } 
}

<Component {...obj} />
芮岳
2023-03-14

这记录在React留档中。

要在此处复制粘贴,它会声明:

如果您已经有道具作为对象,并且您想在JSX中传递它,您可以使用...作为“传播”运算符来传递整个道具对象。

它是完全有效的,有文档记录的JSX。

此外,它们提供了向组件传递道具的两种不同方法的示例,一种是离散属性,另一种是扩展对象,并注意到就接收道具的组件而言,它们是相同的:

function App1() {
  return <Greeting firstName="Ben" lastName="Hector" />;
}

function App2() {
  const props = {firstName: 'Ben', lastName: 'Hector'};
  return <Greeting {...props} />;
}

把这个扩展到上面的例子,你可以认为这两个是等价的:

function App1() {
    return <Text test={1} />;
}

function App2() {
    const props = {test: 1};
    return <Text {...props} />;
}

至于它在引擎盖下如何工作的细节,请记住这是一个透明的过程,所以我们不需要太在意它在引擎盖下是如何工作的——只要你知道它们是等效的,一条是“捷径”,你就可以了。

还值得注意的是,文档中规定应谨慎使用扩展方法,因为“扩展属性可能很有用,但它们也可以轻松地将不必要的道具传递给不关心它们的组件,或者将无效的HTML属性传递给DOM。”

希望这有助于澄清你的问题!

 类似资料:
  • Markdown 标准 本身所包含的功能有限,所以产生了许多第三方的扩展语法,如 GitHub Flavored Markdown。 这里只介绍众多扩展语法中的一部分内容,它们在不同平台或工具的支持程度不同,请参考具体平台或工具的文档和说明来使用。 删除线 代码块和语法高亮 表格 Task List CommonMark CommonMark 试图将碎片化的 Markdown 实现和扩展进行标准化

  • 问题内容: 的意义是什么 我正在尝试那样使用它 问题答案: 它被称为传播属性,其目的是使道具的传递更加容易。 让我们假设您有一个接受N个属性的组件。如果数量增加,将这些信息传递下去可能是乏味且笨拙的。 因此,您可以这样做,将它们包装在一个对象中并使用扩展符号 它将把它解压缩到组件上的props中,即,仅当将props传递给另一个组件时,才“永远” 在函数内部使用。照常使用打开包装的道具。

  • Markdown 的目标是实现「易读易写」。 可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其

  • 问题内容: 我正在尝试使用python探索Elasticsearch集群,而我是Elasticsearch的新手。如果使用Marvel / Sense,则可以使用查看集群的架构 。在Python中有等效的方法吗?如果是这样,我可以看到集群的“模式”! 更一般而言,我想以编程方式发现所有索引,每个索引的doc_types,对doc_types的字段进行分类(它们是文本字符串,整数,浮点数,数字取值范

  • 在扩展查询模式中可以使用如下特殊操作符:  或(OR)操作符: hello | world  非(NOT)操作符: hello -world hello !world  字段(field)搜索符: @title hello @body world  字段限位修饰符(版本Coreseek 3/Sphinx 0.9.9-rc1中引入): @body[50] hello  多字段搜索符: @(

  • 在这段代码中是什么意思?