Saya sangat menyukai pola CSS inline di Bereaksi dan memutuskan untuk menggunakannya.
Namun, Anda tidak dapat menggunakan :hover
pemilih dan sejenisnya. Jadi apa cara terbaik untuk mengimplementasikan highlight-on-hover saat menggunakan gaya CSS sebaris?
Satu saran dari #reactjs adalah memiliki Clickable
komponen dan menggunakannya seperti ini:
<Clickable>
<Link />
</Clickable>
The Clickable
memiliki hovered
negara dan dibagikan sebagai alat peraga untuk Link tersebut. Namun, Clickable
(cara saya mengimplementasikannya) membungkus Link
dalam div
sehingga dapat diatur onMouseEnter
dan onMouseLeave
untuk itu. Ini membuat hal-hal sedikit rumit (misalnya span
dibungkus div
berperilaku berbeda dari span
).
Apakah ada cara yang lebih sederhana?
onMouseEnter
danonMouseLeave
. Mengenai implementasi yang tepat dari itu - sepenuhnya terserah Anda. Untuk melihat contoh spesifik Anda, mengapa tidak membuat<Clickable/>
bungkusnyaspan
?Jawaban:
Saya dalam situasi yang sama. Benar-benar menyukai pola menjaga styling di komponen tetapi keadaan hover sepertinya merupakan rintangan terakhir.
Apa yang saya lakukan adalah menulis mixin yang dapat Anda tambahkan ke komponen Anda yang membutuhkan status hover. Mixin ini akan menambah
hovered
properti baru ke status komponen Anda. Ini akan diatur ketrue
jika pengguna melayang di atas simpul DOM utama dari komponen dan mengatur kembalifalse
jika pengguna meninggalkan elemen.Sekarang dalam fungsi render komponen Anda, Anda dapat melakukan sesuatu seperti:
Sekarang setiap kali
hovered
status perubahan komponen akan rerender.Saya juga membuat repo kotak pasir untuk ini yang saya gunakan untuk menguji beberapa pola ini sendiri. Periksa jika Anda ingin melihat contoh implementasi saya.
https://github.com/Sitebase/cssinjs/tree/feature-interaction-mixin
sumber
Saya pikir onMouseEnter dan onMouseLeave adalah cara untuk pergi, tapi saya tidak melihat perlunya komponen pembungkus tambahan. Inilah cara saya mengimplementasikannya:
Anda kemudian dapat menggunakan status hover (benar / salah) untuk mengubah gaya tautan.
sumber
:hover
tetapi tidak:focus
onFocus
acara; sehingga Anda dapat melakukan hal yang sama:focus
seperti:hover
, kecuali alih-alih membutuhkanonMouseEnter
danonMouseLeave
Anda hanya perluonFocus
Terlambat ke pesta tetapi datang dengan solusi. Anda dapat menggunakan "&" untuk menentukan gaya untuk mengarahkan anak ke lain-lain dll:
sumber
Anda dapat menggunakan Radium - ini adalah alat sumber terbuka untuk gaya sebaris dengan ReactJS. Ia menambahkan persis pemilih yang Anda butuhkan. Sangat populer, coba lihat - Radium on npm
sumber
module.exports = React.createClass({ displayName: 'App',})
module.exports = Radium(React.createClass({ displayName: 'App',}))
atau menugaskan kelas pada nilai dan menambahkan@Radium
dekorator di atasnya sebagai dokumen menyebutkan github.com/FormidableLabs/radium#usageDukungan penuh CSS adalah alasan utama jumlah besar perpustakaan CSSinJS ini, untuk melakukan ini secara efisien, Anda perlu menghasilkan CSS yang sebenarnya, bukan gaya inline. Gaya inline juga jauh lebih lambat dalam bereaksi dalam sistem yang lebih besar. Penafian - Saya memelihara JSS .
sumber
Made Style It - sebagian - karena alasan ini (yang lain tidak setuju dengan implementasi lib / sintaks lain dan inline stylings kurangnya dukungan untuk awalan nilai properti). Percayalah kita harus bisa hanya menulis CSS dalam JavaScript dan memiliki komponen yang sepenuhnya lengkap HTML-CSS-JS. Dengan string template ES5 / ES6 kita sekarang dapat dan itu bisa sangat cantik! :)
npm install style-it --save
Sintaks Fungsional ( JSFIDDLE )
Sintaks JSX ( JSFIDDLE )
sumber
Menambahkan ke jawaban Jonathan , berikut adalah acara untuk membahas fokus dan status aktif, dan penggunaan
onMouseOver
alih-alihonMouseEnter
karena yang terakhir tidak akan menggelembung jika Anda memiliki elemen anak dalam target acara yang sedang diterapkan.sumber
Inilah solusi saya menggunakan React Hooks. Ini menggabungkan operator spread dan operator ternary.
style.js
Button.js
sumber
Berkenaan dengan komponen yang ditata dan react-router v4 Anda dapat melakukan ini:
sumber
Ini bisa menjadi peretasan yang bagus karena memiliki gaya inline di dalam komponen reaksi (dan juga menggunakan: hover fungsi CSS):
sumber
Checkout Typestyle jika Anda menggunakan Bereaksi dengan Teks.
Di bawah ini adalah contoh kode untuk: hover
sumber
Anda dapat menggunakan modul css sebagai alternatif, dan juga bereaksi-css-modul untuk pemetaan nama kelas.
Dengan begitu Anda dapat mengimpor gaya Anda sebagai berikut dan menggunakan css normal yang dicakup secara lokal ke komponen Anda:
Berikut adalah contoh modul css webpack
sumber
:hover
gaya saat runtime seperti dengan Radium atauonMouseOver
solusi berbasis lainnyaonMouseOver dan onMouseLeave dengan setState pada awalnya sepertinya sedikit berlebihan bagi saya - tetapi karena ini adalah bagaimana reaksinya bekerja, sepertinya solusi termudah dan terbersih bagi saya.
rendering theming css serverside misalnya, juga merupakan solusi yang baik dan menjaga komponen reaksi lebih bersih.
jika Anda tidak perlu menambahkan gaya dinamis ke elemen (misalnya untuk tema), Anda tidak boleh menggunakan gaya inline sama sekali, tetapi gunakan kelas css.
ini adalah aturan html / css tradisional untuk menjaga html / JSX tetap bersih dan sederhana.
sumber
Cara sederhana menggunakan operator ternary
sumber
Dengan menggunakan kait:
sumber
Saya menggunakan solusi hack-ish yang cukup untuk ini di salah satu aplikasi terbaru saya yang berfungsi untuk tujuan saya, dan saya menemukan ini lebih cepat daripada menulis fungsi pengaturan hover kustom di vanilla js (meskipun, saya tahu, mungkin bukan praktik terbaik di sebagian besar lingkungan ..) Jadi, jika Anda masih tertarik, ini dia.
Saya membuat elemen induk hanya untuk menahan gaya javascript inline, lalu seorang anak dengan className atau id yang stylesheet css saya akan latch ke dan menulis gaya hover di file css khusus saya. Ini berfungsi karena elemen anak yang lebih granular menerima gaya js inline melalui pewarisan, tetapi memiliki gaya hover ditimpa oleh file css.
Jadi pada dasarnya, file css saya yang sebenarnya ada hanya untuk tujuan menahan efek hover, tidak ada yang lain. Ini membuatnya cukup ringkas dan mudah dikelola, dan memungkinkan saya melakukan pekerjaan berat dalam gaya komponen Bereaksi in-line saya.
Ini sebuah contoh:
Perhatikan bahwa gaya inline "child" tidak memiliki set properti "warna". Jika ya, ini tidak akan berhasil karena gaya inline akan diutamakan di atas stylesheet saya.
sumber
Saya tidak 100% yakin apakah ini jawabannya, tetapi ini trik yang saya gunakan untuk mensimulasikan CSS: efek hover dengan warna dan gambar sejajar.
CSS:
Contoh: https://codepen.io/roryfn/pen/dxyYqj?editors=0011
sumber
Di mana Hoverable didefinisikan sebagai:
sumber