React hook 親から子の関数呼び出し

2022/01/14

どの記事もざっくりだったのであえて書く

使用hookは forwardRef, useRef, useImperativeHandle の3種類

先ずは親と子を用意してます

App.js

const ChildComp = () => {
  const childFunc = () => {
    alert(“hello from child comp”)
  }
}

const Parent = () => {
  return (
    <>
      <button>button</button>
      <ChildComp>
    </>
  )
}


ここではまだボタンだけある親コンポーネントとアラートを出すだけの子componentがあります。
まだこの時点ではボタンを押したところで何も反応はないはずですそこで使うのが“useRef”と“forwardRef”です
“useRef”は親に使い “forwardRef”は子に使います

App.js

import { forwardRef, useRef } from “react”

const ChildComp = forwardRef((props, ref) => {
  const childFunc = () => {
    alert(“hello from child comp”)
  }
}

const Parent = () => {
  const childCompRef = useRef()
  return (
     <>
        <button>button</button>
        <ChildComp ref={childCompRef}>
     </>
  )
}

useRefで要素を参照できるようになるので、この場合は以下のように参照しています

  <ChildComp ref={childCompRef}>

子コンポーネントをforwardRefで囲むと、propsとは別に2番目のパラメーターを受け取ります
さっき参照してたRefを親コンポーネントから渡してます
それを使用して、親コンポーネントからアクセスできる関数を指定できます次は以下に示すように、子の関数に“useImperativeHandle”を使用して実行します


App.js

import { forwardRef, useRef, useImperativeHandle } from “react”

const ChildComp = forwardRef((props, ref) => {
 useImperativeHandle(ref, () => ({

   const childFunc = () => {
     alert(“hello from child comp”)
  }
}))
}

const Parent = () => {
  const childCompRef = useRef()
    return (
       <>
          <button>button</button>
          <ChildComp ref={childCompRef}>
       </>
    )
}

“useImperativeHandle”は2つの必須パラメーターが必要で、1つ目は参照で、2つ目は初期化関数であり、childFuncを渡すことができます最後は、ボタンに以下のようにに追加して関数をバインドしましょう!!


  <button onClick={() => childCompRef.current.childFunc()}>button</button>

これで親コンポーネントから子のコンポーネントの関数を呼び出すことができるようになったかと思います

サニージェム公式note

アーカイブ記事

すべて
  • 1月
  • 2月
  • 3月
  • 4月
  • 5月
  • 6月
  • 7月
  • 8月
  • 9月
  • 10月
  • 11月
  • 12月

contact us お問い合わせ

Contact お問い合わせ・ご相談

「何から相談すればいいかわからない」
そんな段階でも、お気軽にご連絡ください。

Recruit 求人へのご応募

サニージェムの考え方に共感してくれる方と、
ぜひ一緒に働きたいと思っています。