你可以在实例化后向 React JSX 元素添加一个键吗?

Posted

技术标签:

【中文标题】你可以在实例化后向 React JSX 元素添加一个键吗?【英文标题】:Can you add a key to a React JSX Element after it's instantiated? 【发布时间】:2017-12-22 15:18:53 【问题描述】:

鉴于以下情况:

function generateWrapper(...elements) 
    return (
        <div>
            ...elements
        </div>
    );


ReactDOM.render(
    generateWrapper(
        <MyElement name="first" />,
        <MyElement name="second" />,
    ),
    document.getElementById("app"),
);

React 会理所当然地抱怨我没有为包装器 div 的每个子级添加 key 属性。我怎样才能做到这一点?还是这违背了 React 开发的精神?感谢您提前提供任何答案!

PS:是的,我看过一个类似的问题,但它似乎针对不使用 JSX 的用户

PPS:我确实意识到我只能为 firstsecond MyElement 添加一个密钥,但这是我试图避免的

编辑:更改代码以更好地适应我的情况

【问题讨论】:

如果你渲染一个列表,每个组件都需要一个键。 我完全理解为什么需要一个密钥,以及在实例化过程中如何去做。我只是问是否可以在实例化后执行它,以便可以在 generateWrapper 中完成一次,而不是针对每个组件 我一般用[].map((e, i) =&gt; &lt;div key=i&gt;e&lt;/div&gt;) 我也被推荐在其他地方为MyElement 创建一个包装组件,为MyElement 添加一个密钥,只是为了为那些寻找答案的人提供我收到的所有替代方案跨度> 【参考方案1】:

看看React.cloneElement。您可以使用它在 generateWrapper 方法中创建和附加密钥属性。

function generateWrapper(...elements) 
  return (
    <div>
      
        elements.map(element =>
          React.cloneElement(element,  key: 'your-unique-key-here' )
      
    </div>
  );

【讨论】:

这似乎正是我想要的。只是想知道,这种方法是否会继续得到 React 团队的全力支持?您知道性能影响吗? 不能特别代表 React 团队发言,但扩展 JSX 元素的 props 是一种常见的模式,可能不会很快消失。

以上是关于你可以在实例化后向 React JSX 元素添加一个键吗?的主要内容,如果未能解决你的问题,请参考以下文章

java 添加一组元素

jquery如何动态的添加一条html代码

React / JSX生成的HTML元素是否对Google Web Crawlers不可见?

Java如何向容器中添加一组元素详解(附源码)

react学习介绍JSX

前端:Vue和React都学会后,对比React和Vue的11个基本功能-