≪ Today I learned.
RSS購読
    公開日
    タグ
    JavaScript
    著者
    ダーシノ

    Reactで複数のrefを使いたいときの方法

    ときどき複数のrefを使いたいことがあるが、コンポーネントに渡せるrefはひとつだけなのでちょっとした対応が必要。

    type Ref<T extends HTMLElement> = MutableRefObject<T> | ForwardedRef<T>
    
    /**
     * 複数のrefをマージする
     */
    function mergeRefs<T extends HTMLElement>(...refs: Ref<T>[]) {
      return (node: T) => {
        for (const ref of refs) {
          if (ref === null) { continue }
    
          if (typeof ref === 'function') {
            ref(node)
          } else {
            ref.current = node
          }
        }
      }
    }
    const Component = forwardRef<HTMLElement, Props>((props, forwardedRef) => { 
      const componentRef = useRef(null)
    
      // 複数のrefをマージしてコンポーネントにわたす
      return <Element ref={mergeRefs(componentRef, forwardedRef)} />
    })