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

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

使用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>

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

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL