Buat komponen input yang bisa dikontrol dari parent, misalnya: parent bisa memanggil focusInput() secara langsung ke anak.
Struktur:
- Komponen Anak: input yang expose fungsi focus().
- Komponen Parent: tombol yang panggil fungsi dari anak.
Kode Lengkap:
jsxCopyEditimport React, { useRef, useImperativeHandle, forwardRef } from 'react'; // Komponen anak menggunakan forwardRef const CustomInput = forwardRef((props, ref) => { const inputRef = useRef(); useImperativeHandle(ref, () => ({ focusInput: () => { inputRef.current.focus(); } })); return <input ref={inputRef} placeholder="Dikendalikan dari parent" />; }); function ParentComponent() { const customInputRef = useRef(); return ( <div> <h1>useImperativeHandle Demo</h1> <CustomInput ref={customInputRef} /> <button onClick={() => customInputRef.current.focusInput()}> Fokus ke Input </button> </div> ); } export default ParentComponent; Penjelasan useImperativeHandle:
- Digunakan bersamaan dengan forwardRef untuk expose method dari komponen anak ke parent.
- Membatasi akses ref: hanya expose method tertentu (focusInput()), bukan seluruh DOM.
- Cocok untuk membuat komponen yang reusable dengan kontrol imperatif (misalnya .scrollToTop(), .focus(), .reset()).