react获取循环列表的ref

react 项目中有时会需要用到ref去获取节点的真实dom对象,在函数组件中官方推荐使用useRef

我在渲染列表时想获取所有li的dom元素,根据官方文档中的demo,我写出了下面的代码,点击button时打印ref的值

import React, { useRef } from 'react';

export default function Demo() {
  const list = [1, 2, 3, 4, 5];
  const liRef = useRef();
  return (
    <ul>
      {
        list.map(item => {
          return <li ref={liRef} key={item} id={'myli' + item}>{item}</li>
        })
      }
      <button onClick={() => console.log(liRef.current)}>getRef</button>
    </ul>
  )
}

但是结果不尽如人意


image.png

搜索了许久,返现标签的ref属性,可以传入函数,在函数中自定义接受逻辑,于是改进了代码:

import React, { useRef } from 'react';

export default function Demo() {
  const list = [1, 2, 3, 4, 5];
  const liRef = useRef();
  const liRefList = useRef([])
  function getRef(dom) {
    liRefList.current.push(dom)
  }
  return (
    <ul>
      {
        list.map(item => {
          return <li ref={liRef} key={item} id={'myli' + item}>{item}</li>
        })
      }
      <button onClick={() => console.log(liRef.current)}>getRef</button>
      {
        list.map(item => {
          return <li ref={getRef} key={item} id={'my-list-item' + item}>{item}</li>
        })
      }
      <button onClick={() => console.log(liRefList.current)}>getRefList</button>
    </ul>
  )
}

得到想要的结果:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。