如何在 JSX 中添加自定义 html 属性

IT技术 javascript html node.js reactjs react-component
2021-04-02 02:21:33

这背后有不同的原因,但我想知道如何简单地向 JSX 中的元素添加自定义属性?

6个回答

编辑:更新以反映 React 16

React 16 原生支持自定义属性。这意味着向元素添加自定义属性现在就像将其添加到render函数一样简单,如下所示:

render() {
  return (
    <div custom-attribute="some-value" />
  );
}

更多信息:
https : //reactjs.org/blog/2017/09/26/react-v16.0.html#support-for-custom-dom-attributes
https://facebook.github.io/react/blog/ 2017/09/08/dom-attributes-in-react-16.html


上一个答案(React 15 及更早版本)

当前不支持自定义属性。有关更多信息,请参阅此未解决的问题:https : //github.com/facebook/react/issues/140

作为一种解决方法,您可以在以下内容中执行以下操作componentDidMount

componentDidMount: function() {
  var element = ReactDOM.findDOMNode(this.refs.test);
  element.setAttribute('custom-attribute', 'some value');
}

有关工作示例,请参阅https://jsfiddle.net/peterjmag/kysymow0/(灵感来自 syranide 在此评论中的建议。)

我完全反应 n00b 很抱歉,如果这是一个愚蠢的问题,但为什么不在 ref 回调中添加所有自定义属性?例如:ref={(thisSvgElement) => { thisSvgElement.setAttribute('xmlns:xlink', ' w3.org/1999/xlink' ); }}
2021-05-22 02:21:33
@k7n4n5t3w4rt 是的,这也应该有效。当我写这个答案时,Ref 回调并不存在。
2021-05-30 02:21:33
为什么不能在组件上执行此操作,以便 attr 将呈现在渲染的第一个元素上?
2021-06-02 02:21:33
这并不完全正确。您可以通过在其前面加上data-来添加自定义属性aria-请参阅Luca 的回答和/或React Docs
2021-06-17 02:21:33
是的,我猜只有这样。不过这种方法看起来很有趣
2021-06-20 02:21:33

您可以使用 ES6 扩展运算符添加属性,例如

let myAttr = {'data-attr': 'value'}

并在渲染方法中:

<MyComponent {...myAttr} />
@AndreyBorisko - 我想提到但错过了,无效的 html 属性和自定义属性目前将无法使用,除非以data-.
2021-05-22 02:21:33
好吧,这是一个codepen 示例我在那里没有看到自定义属性
2021-06-02 02:21:33
如果您的项目中有 ES6 转译器,它确实有效
2021-06-03 02:21:33
我认为这个答案具有误导性,因为该问题特定于自定义属性,而@peterjmag 提出的解决方案是正确的。
2021-06-14 02:21:33
你认为这let myAttr = {'custom-attr': 'value'}会奏效吗?
2021-06-18 02:21:33

考虑到您想传递一个名为myAttrvalue的自定义属性myValue,这将起作用:

<MyComponent data-myAttr={myValue} />
这感觉像是最符合 HTML5 的答案
2021-05-23 02:21:33
反应 16 及以上
2021-05-25 02:21:33
这是正确答案。您可以通过在它们前面加上data-来添加自定义属性aria-另见:facebook.github.io/react/docs/dom-elements.html
2021-06-10 02:21:33
@GusDeCool 首先,据说已经用 react 进行了测试15.3.1,因此您的downvote 没有任何意义,因为您抱怨它不适用于15.5.4. 其次,我刚刚测试过它,^15.6.1它工作得很好。仔细检查您的代码。
2021-06-14 02:21:33
啊,我明白了,react-dom不是react对不起这是我的错 :)。
2021-06-19 02:21:33

您可以使用“ is ”属性来禁用元素的 React 属性白名单。

在此处查看我的答案: Stackoverflow

如果您使用的是 es6,这应该有效:

<input {...{ "customattribute": "somevalue" }} />
你的天才!谢谢。
2021-06-02 02:21:33