如何获取使用 .map 呈现的第一个元素的 ref?

Posted

技术标签:

【中文标题】如何获取使用 .map 呈现的第一个元素的 ref?【英文标题】:How to get the ref of the first element that's rendered with .map? 【发布时间】:2018-05-28 22:29:26 【问题描述】:

我需要在几行中显示视频(卡片)的缩略图,并专注于第一个缩略图。我使用嵌套地图进行了显示。该代码基本上遍历一个视频数组并返回多行视频。

我们如何专注于渲染的第一个元素?我认为我们需要获得第一个元素的 ref 来关注。但是我们如何在这里设置 ref 并在另一个函数中引用它呢?

const CategoryGrid = props => 
  return (
    <HotKeys handlers=handlers>
      <div className="grid-container">
        <p className="title"> props.title.toUpperCase() </p>
        <div className="grid">
          
            props.videos.map((rowvideos,index) => 
                var rowVideoArr = [];
                rowvideos.map((video,key)=>
                  rowVideoArr.push(<div  key=video.id className="fleft card-container grow">
                    <Card key=video.id title=video.name background=video.thumbnailUrl/>
                  </div>)
                )
                return(<div className="row" key=index>rowVideoArr</div>)
            )
          
        </div>
      </div>
    </HotKeys>
  );

【问题讨论】:

也许将其设置在查找表中? ref =&gt; this.videosRefs[key] = ref? 【参考方案1】:

Hello react hook here 我希望这可以帮助您使用 tabIndex 定位第一个元素。

    const elementRef = useRef();

    useEffect(() => 

        if (elementRef.current.tabIndex === 0) 

            elementRef.current.click();

        

    , []);


    return (
        
        <div tabIndex=index ref=elementRef id=`$activeLink === index ? "selected" : ""`

        </div>

    )

【讨论】:

【参考方案2】:

也许使用查找表对象或数组,并通过索引(或 id)存储所有参考。 然后当组件被挂载时,您可以在第一个(或任何其他通过 key 或 id 的)上触发焦点事件。

带输入的简单示例:

const videos = [
   name: 'video 1' ,
   name: 'video 2' ,
   name: 'video 3' ,
];

class App extends React.Component 
  constructor(props) 
    super(props);
    this.videoRefs = [];
  

  componentDidMount() 
    this.videoRefs[0] && this.videoRefs[0].focus();
  

  render() 
    return (
      <div >
        
          videos.map((video, index) => (
            <input
              key=index
              value=video.name
              ref=ref => this.videoRefs[index] = ref
            />
          ))
        
      </div>
    );
  


ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

【讨论】:

相当不错的解决方案:)

以上是关于如何获取使用 .map 呈现的第一个元素的 ref?的主要内容,如果未能解决你的问题,请参考以下文章

当键是一个只知道第一个元素的元组时,如何获取scala Map值?

如何通过 ref 获取 textinput 的文本/值?

c++/STL/map中怎样获取map中第i个元素

如何获取未使用 javascript 呈现的 dom 元素?

vue中的ref和$refs的使用

vue3 如何通过 ref 获取 DOM 节点