Saya memiliki widget obrolan yang menarik serangkaian pesan setiap kali saya menggulir ke atas. Masalah yang saya hadapi sekarang adalah slider tetap diperbaiki di atas ketika pesan dimuat. Saya ingin fokus pada elemen indeks terakhir dari array sebelumnya. Saya menemukan bahwa saya dapat membuat referensi dinamis dengan melewati indeks, tetapi saya juga perlu tahu apa fungsi gulir yang digunakan untuk mencapai itu
handleScrollToElement(event) {
const tesNode = ReactDOM.findDOMNode(this.refs.test)
if (some_logic){
//scroll to testNode
}
}
render() {
return (
<div>
<div ref="test"></div>
</div>)
}
javascript
reactjs
ecmascript-6
edmamerto
sumber
sumber
Jawaban:
Bereaksi 16.8 +, Komponen fungsional
Klik di sini untuk demo lengkap tentang StackBlits
Bereaksi 16.3 +, Komponen kelas
Komponen kelas - Ref callback
Jangan gunakan String ref.
String merusak kinerja, tidak dapat dikomposasikan, dan sedang dalam perjalanan keluar (Agustus 2018).
resource1 resource2
Opsional: Smoothe scroll animation
Memberikan referensi kepada seorang anak
Kami ingin ref dilampirkan ke elemen dom, bukan ke komponen reaksi. Jadi ketika meneruskannya ke komponen anak, kita tidak bisa menyebutkan nama prop.
Kemudian pasang prop ref ke elemen dom.
sumber
window.scrollTo(0, offsetTop)
adalah opsi yang lebih baik dengan dukungan yang lebih baik di antara browser saat iniini bekerja untuk saya
EDIT: Saya ingin memperluas ini berdasarkan komentar.
sumber
Cukup temukan posisi teratas elemen yang telah Anda tentukan https://www.w3schools.com/Jsref/prop_element_offsettop.asp lalu gulir ke posisi ini melalui
scrollTo
metode https://www.w3schools.com/Jsref/met_win_scrollto.aspSesuatu seperti ini seharusnya bekerja:
MEMPERBARUI:
sejak Bereaksi v16.3 yang
React.createRef()
lebih disukaisumber
ReactDOM.findDomNode()
adalah praktik yang lebih baik - karena Bereaksi ulang membuat komponen, div yang Anda dapatkan dengan ID-nya mungkin tidak ada pada saat Anda memanggil fungsifindDOMNode
. Dalam kebanyakan kasus, Anda dapat melampirkan referensi ke simpul DOM dan menghindari penggunaanfindDOMNode
sama sekali.this.myRef.current.scrollIntoView()
bukanwindow.scrollTo(0, this.myRef)
.Menggunakan findDOMNode pada akhirnya akan ditinggalkan.
Metode yang disukai adalah menggunakan referensi panggil balik.
github eslint
sumber
Anda sekarang dapat menggunakan
useRef
dari API kait reaksihttps://reactjs.org/docs/hooks-reference.html#useref
pernyataan
komponen
Menggunakan
sumber
console.log
bahwa itu menjalankanwindow.scrollTo
pernyataan Anda (disesuaikan untuk kasus saya) tetapi belum bergulir. Mungkinkah ini terkait dengan fakta bahwa saya menggunakan React Bootstrap Modal?Anda juga dapat menggunakan
scrollIntoView
metode untuk menggulir ke elemen yang diberikan.sumber
Saya mungkin terlambat ke pesta, tetapi saya mencoba menerapkan referensi dinamis untuk proyek saya dengan cara yang tepat dan semua jawaban yang saya temukan sampai tahu tidak cukup memuaskan keinginan saya, jadi saya datang dengan solusi yang saya pikir adalah sederhana dan menggunakan cara reaksi asli dan direkomendasikan untuk membuat referensi.
kadang-kadang Anda menemukan bahwa cara dokumentasi ditulis mengasumsikan bahwa Anda memiliki jumlah penayangan yang diketahui dan dalam banyak kasus jumlah ini tidak diketahui sehingga Anda memerlukan cara untuk menyelesaikan masalah dalam kasus ini, buat referensi dinamis untuk jumlah penayangan yang tidak diketahui yang Anda butuhkan untuk ditampilkan di kelas
jadi solusi paling sederhana yang bisa saya pikirkan dan bekerja dengan sempurna adalah dengan melakukan sebagai berikut
dengan cara itu gulungan akan menuju ke baris apa pun yang Anda cari ..
bersorak dan berharap itu membantu orang lain
sumber
Jul 2019 - Pengait / fungsi khusus
Sebuah kait / fungsi khusus dapat menyembunyikan detail implementasi, dan menyediakan API sederhana untuk komponen Anda.
Bereaksi 16.8 + Komponen Fungsional
Gunakan dalam komponen fungsional apa pun.
demo penuh
Bereaksi 16.3 + Komponen kelas
Gunakan dalam komponen kelas apa pun.
Demo penuh
sumber
Anda dapat mencoba cara ini:
sumber
Anda dapat menggunakan sesuatu seperti
componentDidUpdate
sumber
Saya memiliki skenario sederhana, Ketika pengguna mengklik item menu di Material UI Navbar saya ingin menggulirkannya ke bagian halaman. Saya bisa menggunakan ref dan thread mereka melalui semua komponen tapi saya benci threading props props beberapa komponen karena itu membuat kode rapuh.
Saya baru saja menggunakan vanilla JS di komponen reaksi saya, ternyata berfungsi dengan baik. Menempatkan ID pada elemen yang ingin saya gulir ke dan di komponen header saya, saya baru saja melakukan ini.
sumber
Ikuti langkah ini:
1) Pasang:
2) Impor paket:
3) Penggunaan:
sumber
Berikut ini potongan kode Komponen Kelas yang dapat Anda gunakan untuk menyelesaikan masalah ini:
Pendekatan ini menggunakan referensi dan juga menggulir dengan lancar ke target referensi
sumber
Cara terbaik adalah menggunakan
element.scrollIntoView({ behavior: 'smooth' })
. Ini menggulir elemen ke tampilan dengan animasi yang bagus.Ketika Anda menggabungkannya dengan React's
useRef()
, itu bisa dilakukan dengan cara berikut.Saat Anda ingin menggulir ke komponen Bereaksi, Anda perlu meneruskan referensi ke elemen yang diberikan. Artikel ini akan masuk lebih dalam ke masalah .
sumber
(ref) => window.scrollTo(0, ref.current.offsetTop)
tetapi kemudian hanya mendapatkan offset kecil dari atas dan tidak sampai pada target. Saya percaya ini karena lokasi wasit adalah seseorang yang dihitung pada awalnya dan kemudian tidak diperbarui. Saran Anda memperbaiki masalah saya sementara jawaban yang diterima tidak.Apa yang berhasil untuk saya:
sumber
Hanya kepala, saya tidak bisa mendapatkan solusi ini untuk bekerja pada komponen Material UI. Sepertinya mereka tidak memiliki
current
properti.Saya baru saja menambahkan yang kosong di
div
antara komponen-komponen saya dan mengatur ref ref pada itu.sumber
sumber
Bagi siapa pun yang membaca ini yang tidak terlalu beruntung dengan solusi di atas atau hanya ingin solusi drop-in yang sederhana, paket ini bekerja untuk saya: https://www.npmjs.com/package/react-anchor-link- gulir halus . Selamat Hacking!
sumber
Saya menggunakan ini di dalam fungsi onclick untuk menggulir dengan lancar ke div di mana id-nya adalah "step2Div".
sumber