Saya mencoba menggunakan React.forwardRef, tetapi tersandung cara membuatnya bekerja dalam komponen berbasis kelas (bukan HOC).
Contoh dokumen menggunakan elemen dan komponen fungsional, bahkan membungkus kelas dalam fungsi untuk komponen tingkat tinggi.
Jadi, mulailah dengan sesuatu seperti ini di ref.js
file mereka :
const TextInput = React.forwardRef(
(props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />)
);
dan sebagai gantinya mendefinisikannya sebagai sesuatu seperti ini:
class TextInput extends React.Component {
render() {
let { props, ref } = React.forwardRef((props, ref) => ({ props, ref }));
return <input type="text" placeholder="Hello World" ref={ref} />;
}
}
atau
class TextInput extends React.Component {
render() {
return (
React.forwardRef((props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />))
);
}
}
hanya bekerja: /
Juga, saya tahu saya tahu, wasit bukanlah cara bereaksi. Saya mencoba menggunakan pustaka kanvas pihak ketiga, dan ingin menambahkan beberapa alat mereka dalam komponen terpisah, jadi saya membutuhkan pendengar acara, jadi saya memerlukan metode siklus hidup. Ini mungkin pergi ke rute yang berbeda nanti, tetapi saya ingin mencoba ini.
Dokumen mengatakan itu mungkin!
Penerusan referensi tidak terbatas pada komponen DOM. Anda juga dapat meneruskan ref ke instance komponen kelas.
Tapi kemudian mereka terus menggunakan HOC, bukan hanya kelas.
sumber
connect
atau marterial-uiwithStyles
?connect
atauwithStyles
? Anda harus membungkus semua HOC denganforwardRef
dan secara internal menggunakan prop "aman" untuk meneruskan referensi ke komponen terendah dalam rantai.Anda perlu menggunakan nama prop yang berbeda untuk meneruskan referensi ke kelas.
innerRef
biasanya digunakan di banyak perpustakaan.sumber
beautifulInputElement
lebih merupakan fungsi daripada Elemen Bereaksi, seharusnya seperti iniconst beautifulInputElement = <BeautifulInputForwardingRef ref={ref => ref && ref.focus()} />
Pada dasarnya, ini hanyalah fungsi HOC. Jika Anda ingin menggunakannya dengan kelas, Anda dapat melakukannya sendiri dan menggunakan alat peraga biasa.
Pola ini digunakan misalnya di
styled-components
dan disebut diinnerRef
sana.sumber
innerRef
benar-benar kehilangan intinya. Tujuannya adalah transparansi lengkap: Saya harus dapat memperlakukan<FancyButton>
seolah-olah itu adalah elemen DOM biasa, tetapi menggunakan pendekatan komponen bergaya, saya perlu ingat bahwa komponen ini menggunakan prop yang dinamai sewenang-wenang untuk ref, bukan hanyaref
.innerRef
meneruskan referensi ke anak menggunakanReact.forwardRef
, itulah yang OP ingin capai.Ini dapat dilakukan dengan komponen tingkat tinggi, jika Anda suka:
Dan kemudian di file komponen Anda:
Saya melakukan dimuka bekerja dengan tes & menerbitkan paket untuk ini,
react-with-forwarded-ref
: https://www.npmjs.com/package/react-with-forwarded-refsumber
Jika Anda perlu menggunakan kembali ini di banyak komponen yang berbeda, Anda dapat mengekspor kemampuan ini ke sesuatu seperti
withForwardingRef
pemakaian:
sumber