React - 如何为每个子组件提供唯一的引用?

React - How do I give each child component a unique ref?

提问人:MDC 提问时间:4/8/2017 更新时间:5/12/2021 访问量:2759

问:

我有一个父组件,它呈现了几个子组件之一:

class Parent extends React.Component {
  ...
  render() {
    const activeChild = this.state.activeChild; // 0, 1, 2, etc.
    return (
      <div>
        {this.props.children[activeChild]}
      </div>
    );
  }
}

这些子组件中的每一个都需要有一个自己唯一的 DOM 节点。就我而言,我需要将每个子节点传递给第三方库,以便在其上绘制一些东西(例如:可视化、画布或地图)。ref

问题在于,当子组件在不同的时间被渲染到 React 树中的同一“点”时,它们最终都会共享相同的 。(我认为)ref

下面是一个使用 Leaflet.js 演示问题的 JSFidle。

当所有子节点单独呈现时,它们各自获得自己的 DOM 节点来绘制它们的映射。但是当它们一次显示一个时,只有第一个能够绘制到 'd DOM 节点上。ref

我可以告诉 React 为每个单独的子节点使用(并显示)单独的节点,即使这些子节点被挂载在同一点上吗?ref

如果没有,有没有更好的方法来解决这个问题?

javascript 反应 JS dom

评论

1赞 Hamms 4/8/2017
给每个孩子一个唯一的参数:<SimpleMap key="New York City" name={"New York City"} pos={ [ 40.725467, -73.996744 ] } />
0赞 MDC 4/8/2017
这奏效了,谢谢!我读过 React 文档的“列表和键”部分,但我从未想过,即使一次只呈现一个孩子,多个孩子仍然被视为“兄弟姐妹”。
0赞 John Ruddell 4/8/2017
如果引用 React 中的组件或元素,则为 ref。键是 DOM 中每个元素的唯一标识符。当你在一个数组中渲染多个项目时,你必须分配一个键,因为 react 不能自动分配未在 render 方法中显式写出的键。

答:

0赞 Kadir Damene 5/12/2021 #1

如果你的意思是 ref 而不是 key,请尝试如下所示:

class Parent extends React.Component {
  ...
   constructor(props) {
        super(props);
        this.myRef = React.createRef();
   }
  render() {
    const activeChild = this.state.activeChild; // 0, 1, 2, etc.
    const ChildComponent = this.props.children[activeChild];

    return (
      <div>
        <ChildComponent ref={this.myRef} />
      </div>
    );
  }
}

我没有测试这个。