javascript - react : Dynamically setting element keys

标签 javascript reactjs

tl;dr -- 如何动态地将 key 添加到 React 元素?


我有一个 React 组件,当它单独存在时,它有一个静态子列表:

<componentA>
  <child ... />
  <child ... />
  <child ... />
</componentA>

由于列表是静态的,因此不需要任何子项上的键。

现在我有另一个组件包装这个组件并使它的子组件动态:

function componentB(componentA) {
  return class extends React.Component {
    render() {
      const filteredChildren = // ... filter this.props.children

      return (<componentA>
        {filteredChildren}
      </componentA>)
    }
  }
}

由于 children 现在是动态的,我需要向他们添加 key,但是如果我尝试这样的事情:

React.Children.map((child, i) => {
  child.key = i;
  return child
});

它没有说 key 是只读的。来自 this question似乎 cloneElement 也是不行的。那么有没有办法动态设置一个key呢?

最佳答案

map 中使用 cloneElement :

React.Children.map(this.props.children, (child,  i) =>
      React.cloneElement(child, { key:  i })
 );

已知 React.cloneElement 的 2ⁿᵈ 参数是克隆元素的新属性。在这个例子中,其中一个 Prop 是 key

关于javascript - react : Dynamically setting element keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42122453/

相关文章:

javascript - 在 Nightwatch 页面对象中使用 windowHandles

javascript - PHP/HTML 提交后记住所选值 - 从 MySQL 填充的选项

javascript - 在父组件中单击创建并返回一个新组件

reactjs - babel-preset-env 无法识别 jsx

javascript - React 中单选按钮的动态数量验证

javascript - 将用户数据存储在本地存储的对象中

javascript - 下拉菜单打开另一个下拉菜单 - CodeIgniter

javascript - Node 版本 8 中 Async/Await 的性能指南

reactjs - Redux - 未显式调用时调度操作

javascript - 如何在 reactjs 请求中实现条件?