Bagaimana cara mendapatkan ketinggian viewport di ReactJS? Dalam JavaScript normal saya gunakan
window.innerHeight()
tetapi menggunakan ReactJS, saya tidak yakin bagaimana mendapatkan informasi ini. Pemahaman saya adalah itu
ReactDOM.findDomNode()
hanya berfungsi untuk komponen yang dibuat. Namun ini bukan kasus untuk elemen document
atau body
, yang bisa memberi saya ketinggian jendela.
javascript
reactjs
window
viewport
Jabran Saeed
sumber
sumber
.bind(this)
dari argumen callback karena sudah terikat oleh konstruktor.this.state = { width: 0, height: 0 };
agar vars state tidak mengubah tipenya (jika saya mengerti benar window.innerWidth adalah integer ). Tidak mengubah apa pun kecuali membuat kode lebih mudah untuk memahami IMHO. Terima kasih atas jawabannya!this.state = { width: window.innerWidth, height: window.innerHeight };
memulai?Menggunakan Hooks (Bereaksi
16.8.0+
)Buat
useWindowDimensions
kail.Dan setelah itu Anda akan dapat menggunakannya dalam komponen Anda seperti ini
Contoh kerja
Jawaban asli
Ini sama dalam Bereaksi, Anda dapat menggunakan
window.innerHeight
untuk mendapatkan ketinggian viewport saat ini.Seperti yang Anda lihat di sini
sumber
cleanup
fungsi, Anda dapat membacanya di sinireq
prop tersediagetInitialProps
. Jika ya, itu berjalan di server, maka Anda tidak akan memiliki variabel jendela.sumber
height: window.innerHeight || props.height
. Ini tidak hanya akan menyederhanakan kode tetapi juga menghapus perubahan status yang tidak perlu.componentWillMount
tidak lagi direkomendasikan, lihat reactjs.org/docs/react-component.html#unsafe_componentwillmountAku baru saja diedit QOP 's jawaban saat untuk mendukung RSK dan menggunakannya dengan Next.js (Bereaksi 16.8.0+):
/hooks/useWindowDimensions.js :
/yComponent.js :
sumber
Jawaban @speckledcarp sangat bagus, tetapi bisa membosankan jika Anda membutuhkan logika ini di beberapa komponen. Anda bisa mengubahnya sebagai HOC (komponen urutan lebih tinggi) untuk membuat logika ini lebih mudah digunakan kembali.
denganWindowDimensions.jsx
Kemudian di komponen utama Anda:
Anda juga dapat "menumpuk" HOC jika Anda memiliki HOC lain yang perlu Anda gunakan, mis
withRouter(withWindowDimensions(MyComponent))
Sunting: Saya akan menggunakan React hook saat ini ( contoh di atas sini ), karena mereka memecahkan beberapa masalah tingkat lanjut dengan HOC dan kelas
sumber
Saya hanya menghabiskan waktu yang serius untuk mencari tahu beberapa hal dengan Bereaksi dan menggulir acara / posisi - jadi bagi yang masih mencari, inilah yang saya temukan:
Ketinggian viewport dapat ditemukan dengan menggunakan window.innerHeight atau dengan menggunakan document.documentElement.clientHeight. (Tinggi viewport saat ini)
Ketinggian seluruh dokumen (tubuh) dapat ditemukan menggunakan window.document.body.offsetHeight.
Jika Anda berusaha menemukan ketinggian dokumen dan tahu kapan Anda telah mencapai dasarnya - inilah yang saya kemukakan:
(Navav saya adalah 72px dalam posisi tetap, sehingga -72 untuk mendapatkan pemicu scroll-event yang lebih baik)
Terakhir, berikut adalah sejumlah perintah gulir ke console.log (), yang membantu saya mengetahui matematika saya secara aktif.
Wah! Semoga ini bisa membantu seseorang!
sumber
sumber
Jawaban oleh @speckledcarp dan @Jamesl keduanya brilian. Namun, dalam kasus saya, saya membutuhkan komponen yang tingginya dapat memperpanjang ketinggian jendela penuh, bersyarat pada waktu render .... tetapi memanggil HOC dalam
render()
membuat ulang seluruh subtree. BAAAD.Plus, saya tidak tertarik untuk mendapatkan nilai sebagai alat peraga tetapi hanya ingin orangtua
div
yang akan menempati seluruh ketinggian layar (atau lebar, atau keduanya).Jadi saya menulis komponen Induk memberikan div tinggi penuh (dan / atau lebar). Ledakan.
Kasus penggunaan:
Inilah komponennya:
sumber
Anda juga dapat mencoba ini:
sumber