跳至主要内容

本文將介紹 useImperativeHandle 這個 hook,它可以讓我們攔截父元件傳遞的 ref,並回傳一組新的方法給該 ref。這個 hook 通常會搭配 forwardRef 一起使用,讓我們在自定義元件中取得 DOM reference,並且可以在父元件中使用子元件的函式。

信息

💡 Learn more details about useImperativeHandle in Learn useImperativeHandle In 10 Minutes.

When to use React.forwardRef

當我們想要在自定義元件中取得 DOM reference 時,我們會使用 forwardRef 來包裝該元件。在下面的範例中,我們將 <NinjaButton> 包裝在 forwardRef 中,並將 ref 指定給內部的 <button>。這樣一來,我們在使用 <NinjaButton> 時,就可以取得該元件內部的 <button> 的 reference。

即時編輯器
結果
Loading...

When to use useImperativeHandle

我們可以在自定義元件中使用 useImperativeHandle 來攔截父元件傳遞的 ref,並回傳一組新的方法給該 ref。在下面的範例中,btnRefNinjaButton 中的 useImperativeHandle 中接收到一組新的方法 (changeStyle)。這樣一來,我們就可以在父元件 (App) 中使用子元件 (NinjaButton) 的函式。

即時編輯器
結果
Loading...

Summary

forwardRef 是一個高階元件,它可以讓我們在自定義元件中取得 DOM reference。useImperativeHandle 是一個 hook,它可以讓我們攔截父元件傳遞的 ref,並回傳一組新的方法給該 ref。這兩個元件可以搭配使用,讓我們在自定義元件中取得 DOM reference,並且可以在父元件中使用子元件的函式。