使用 JSX 扩展属性覆盖 JSX 属性

Posted

技术标签:

【中文标题】使用 JSX 扩展属性覆盖 JSX 属性【英文标题】:Overriding JSX attributes with JSX spread attributes 【发布时间】:2020-02-22 04:54:35 【问题描述】:

JSX 不允许多次指定一个属性。

F.ex.

<Component prop1="a" prop1="b" />        /* <- This is not allowed */

我想知道如果一个属性被显式指定一次会发生什么,但另外,另一个包含相同属性的扩展属性被传递给组件:

<Component prop1="a" ...obj />         /* where obj contains an attribute called "prop1" */

属性的顺序很重要吗?例如。第二个属性会覆盖第一个吗?

【问题讨论】:

何不试试呢?是的,后面的属性会覆盖前面的属性 @AndyRay 错了!将返回第一个定义的属性。 【参考方案1】:

第二个出现的道具将覆盖第一个。

在这种情况下,prop1 将是 "b"

例如:

const obj = prop1: 'b' ;
return (<Component prop1="a" ...obj />);

这遵循对象传播的工作原理。

MDN Spread Syntax

例如:

const a =  prop1: 'a' ;
const b =  prop1: 'b' ;
const c =  ...a, ...b ;

对象c 将具有prop1"b",因为对象b 在第二次传播。

例如:Code Sandbox

编辑:有关来自 react 的其他证明和文档:Spread attributes in react

【讨论】:

@BhojendraRauniyar 这是使用反应和对象传播。我认为即使是直接使用 html,第一个也不会优先。请参阅代码沙箱以获取证明。 @BhojendraRauniyar 这不是真的。他的例子与我制作的和你分叉的第一个沙盒相匹配。你的不符合他让 obj 有一个名为 prop1 的属性的例子。 他害怕了。感谢您的支持

以上是关于使用 JSX 扩展属性覆盖 JSX 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何向 TypeScript/JSX 中的现有 HTML 元素添加属性?

[react] 怎么在JSX里属性可以被覆盖吗?覆盖的原则是什么?

React JSX 选择性地将属性传递给组件

在 JSX 中拥有可变属性的最佳方式是啥?

使用 TypeScript 3 扩展道具的 React 组件中的默认属性值

React两大组件,三大核心属性,事件处理和函数柯里化