Saya sadar bahwa Anda dapat menentukan gaya dalam kelas Bereaksi, seperti ini:
var MyDiv = React.createClass({
render: function() {
var style = {
color: 'white',
fontSize: 200
};
return <div style={style}> Have a good and productive day! </div>;
}
});
Haruskah saya bertujuan melakukan semua gaya dengan cara ini, dan tidak memiliki gaya yang ditentukan dalam file CSS saya?
Atau haruskah saya menghindari gaya sebaris sepenuhnya?
Tampaknya aneh dan berantakan untuk melakukan sedikit dari keduanya - dua tempat perlu diperiksa ketika mengutak-atik styling.
css
reactjs
inline-styles
react-jsx
eye_mew
sumber
sumber
Jawaban:
Belum ada banyak "Praktik Terbaik". Kita yang menggunakan gaya inline, untuk komponen Bereaksi, masih sangat banyak bereksperimen.
Ada sejumlah pendekatan yang sangat bervariasi: Bereaksi bagan perbandingan lib inline-style
Semua atau tidak?
Apa yang kami sebut sebagai "gaya" sebenarnya mencakup beberapa konsep:
Mulai dengan gaya-negara
Bereaksi sudah mengelola keadaan komponen Anda, ini membuat gaya keadaan dan perilaku cocok untuk colocation dengan logika komponen Anda.
Alih-alih membangun komponen untuk dirender dengan kelas-negara bersyarat, pertimbangkan untuk menambahkan gaya-negara secara langsung:
Perhatikan bahwa kita menggunakan kelas untuk gaya penampilan tetapi tidak lagi menggunakan
.is-
kelas diawali untuk negara dan perilaku .Kami dapat menggunakan
Object.assign
(ES6) atau_.extend
(garis bawah / lodash) untuk menambahkan dukungan untuk beberapa negara:Kustomisasi dan usabilitas ulang
Sekarang kita menggunakannya
Object.assign
menjadi sangat sederhana untuk membuat komponen kita dapat digunakan kembali dengan gaya yang berbeda. Jika kita ingin mengganti gaya default, kita dapat melakukannya pada panggilan-situs dengan alat peraga, seperti jadi:<TodoItem dueStyle={ fontWeight: "bold" } />
. Diimplementasikan seperti ini:Tata letak
Secara pribadi, saya tidak melihat alasan kuat untuk gaya tata letak inline. Ada sejumlah sistem tata letak CSS yang bagus di luar sana. Saya hanya akan menggunakan satu.
Karena itu, jangan tambahkan gaya tata letak langsung ke komponen Anda. Bungkus komponen Anda dengan komponen tata letak. Ini sebuah contoh.
Untuk dukungan tata letak, saya sering mencoba mendesain komponen menjadi
100%
width
danheight
.Penampilan
Ini adalah area yang paling diperdebatkan dari debat "inline-style". Pada akhirnya, tergantung pada komponen yang Anda desain dan kenyamanan tim Anda dengan JavaScript.
Satu hal yang pasti, Anda akan memerlukan bantuan perpustakaan. Status peramban (
:hover
,:focus
), dan kueri media menyakitkan di Bereaksi mentah.Saya suka Radium karena sintaks untuk bagian-bagian keras dirancang untuk memodelkan bahwa dari SASS.
Organisasi kode
Seringkali Anda akan melihat objek gaya di luar modul. Untuk komponen daftar tugas, mungkin terlihat seperti ini:
fungsi pengambil
Menambahkan banyak logika gaya ke template Anda bisa menjadi sedikit berantakan (seperti yang terlihat di atas). Saya suka membuat fungsi getter untuk menghitung gaya:
Menonton lebih lanjut
Saya membahas semua ini secara lebih rinci di React Europe awal tahun ini: Inline Styles dan kapan sebaiknya 'hanya menggunakan CSS' .
Saya senang membantu ketika Anda membuat penemuan baru di sepanjang jalan :) Pukul aku -> @chantastic
sumber
div
,span
,a
, dll itu akan membantu gaya keep terisolasi terlepas dari perpustakaan Anda gunakan. reactpatterns.com/#Style komponenAtribut style di Bereaksi mengharapkan nilai menjadi objek, yaitu pasangan nilai kunci.
style = {}
akan memiliki objek lain di dalamnya yang ingin{float:'right'}
membuatnya berfungsi.Semoga ini bisa menyelesaikan masalah
sumber
style
prop yang dapat menyebabkan masalah kinerja. Paling tidak, tentukan gaya konstan seperti ini di luar Andarender
. Semoga ini membantu!Saya menggunakan gaya sebaris secara luas dalam komponen Bereaksi saya. Saya merasa jauh lebih jelas untuk menentukan gaya di dalam komponen karena selalu jelas gaya apa yang dimiliki dan tidak dimiliki komponen. Plus memiliki kekuatan penuh Javascript yang ada di tangan benar-benar menyederhanakan kebutuhan styling yang lebih kompleks.
Awalnya saya tidak yakin tetapi setelah mencoba-coba selama beberapa bulan, saya sepenuhnya bertobat dan sedang dalam proses mengubah semua CSS saya menjadi inline atau metode css berbasis JS lainnya.
Presentasi oleh karyawan Facebook ini dan kontributor Bereaksi "vjeux" juga sangat membantu - https://speakerdeck.com/vjeux/react-css-in-js
sumber
CSS Modules
,styled-components
dan lainnya.Tujuan utama atribut style adalah untuk gaya yang dinamis dan berdasarkan pada status. Misalnya, Anda bisa memiliki gaya lebar pada bilah kemajuan berdasarkan beberapa keadaan, atau posisi atau visibilitas berdasarkan sesuatu yang lain.
Gaya di JS memberlakukan batasan bahwa aplikasi tidak dapat menyediakan gaya khusus untuk komponen yang dapat digunakan kembali. Ini sangat dapat diterima dalam situasi yang disebutkan di atas, tetapi tidak ketika Anda mengubah karakteristik yang terlihat, terutama warna.
sumber
<div><a>foo <b>bar</b></a><table>...</table></div>
bagaimana Anda gaya itu dari alat peraga? Perlu diingat bahwa struktur html harus tetap menjadi detail implementasi, atau Anda kehilangan banyak komponen manfaat yang disediakan.James K Nelson dalam suratnya "Mengapa Anda Tidak Harus Gaya Menanggapi Komponen Dengan JavaScript" menyatakan bahwa sebenarnya tidak perlu menggunakan gaya sebaris dengan kelemahannya. Pernyataannya adalah bahwa css membosankan lama dengan less / scss adalah solusi terbaik. Bagian dari tesisnya yang mendukung css:
sumber
Styling di JSX sangat mirip dengan styling di HTML.
Kasus HTML:
Kasus BEJ:
sumber
Apa yang saya lakukan adalah memberikan masing-masing komponen yang dapat digunakan kembali saya nama elemen kustom yang unik dan kemudian membuat file css untuk komponen itu, khususnya, dengan semua opsi styling untuk komponen itu (dan hanya untuk komponen itu).
Dan dalam file 'custom-component.css', setiap entri akan dimulai dengan tag komponen-kustom:
Itu berarti Anda tidak kehilangan gagasan kritis tentang pemisahan kekhawatiran. Lihat vs gaya. Jika Anda membagikan komponen Anda, lebih mudah bagi orang lain untuk tema itu agar sesuai dengan sisa halaman web mereka.
sumber
Ini benar-benar tergantung pada seberapa besar aplikasi Anda, jika Anda ingin menggunakan bundler seperti webpack dan bundel CSS dan JS bersama-sama dalam pembuatan dan bagaimana Anda ingin mengatur aliran aplikasi Anda! Pada akhirnya, tergantung pada situasi Anda, Anda dapat mengambil keputusan!
Preferensi saya untuk mengatur file dalam proyek besar adalah memisahkan file CSS dan JS , bisa lebih mudah untuk dibagikan, lebih mudah bagi orang-orang UI untuk hanya melalui file CSS, juga pengorganisasian file yang lebih rapi untuk seluruh aplikasi!
Selalu berpikir seperti ini, pastikan dalam fase pengembangan semuanya di mana mereka seharusnya, dinamai dengan benar dan mudah bagi pengembang lain untuk menemukan hal-hal ...
Saya pribadi mencampurnya tergantung pada kebutuhan saya, misalnya ... Cobalah untuk menggunakan css eksternal, tetapi jika diperlukan Bereaksi akan menerima gaya juga, Anda harus meneruskannya sebagai objek dengan nilai kunci, sesuatu seperti ini di bawah ini:
sumber
Berikut ini adalah styling berbasis boolean di sintaks JSX :
sumber
Saya biasanya memiliki file scss yang terkait dengan setiap komponen Bereaksi. Tapi, saya tidak melihat alasan mengapa Anda tidak akan merangkum komponen dengan logika dan mencari di dalamnya. Maksud saya, Anda memiliki hal yang mirip dengan komponen web.
sumber
Tergantung pada konfigurasi Anda, penataan inline dapat menawarkan kepada Anda Hot reload. Laman web segera dirender ulang setiap kali gaya berubah. Ini membantu saya mengembangkan komponen lebih cepat. Karena itu, saya yakin Anda dapat mengatur lingkungan Hot reload untuk CSS + SCSS.
sumber
Anda dapat menggunakan gaya sebaris tetapi Anda akan memiliki beberapa batasan jika Anda menggunakannya di semua gaya Anda, beberapa batasan yang diketahui adalah Anda tidak dapat menggunakan penyeleksi semu CSS dan permintaan media. di sana.
Anda bisa menggunakan Radium untuk menyelesaikan ini tetapi tetap saja, saya merasa proyek ini akan bertambah rumit.
Saya akan merekomendasikan menggunakan modul CSS .
menggunakan Modul CSS Anda akan memiliki kebebasan menulis CSS dalam file CSS dan tidak perlu khawatir tentang bentrokan penamaan, itu akan ditangani oleh Modul CSS.
Keuntungan dari metode ini adalah memberi Anda fungsionalitas styling ke komponen tertentu. Ini akan membuat kode yang lebih mudah dikelola dan arsitektur proyek yang dapat dibaca untuk pengembang selanjutnya untuk mengerjakan proyek Anda.
sumber
Untuk beberapa komponen, lebih mudah untuk menggunakan gaya inline. Juga, saya merasa lebih mudah dan lebih ringkas (karena saya menggunakan Javascript dan bukan CSS) untuk menghidupkan gaya komponen.
Untuk komponen yang berdiri sendiri, saya menggunakan 'Operator Penyebaran' atau '...'. Bagi saya, itu jelas, indah, dan bekerja di ruang yang sempit. Ini adalah sedikit memuat animasi yang saya buat untuk menunjukkan manfaatnya:
EDIT NOVEMBER 2019
Bekerja di industri (perusahaan Fortune 500), saya TIDAK diizinkan membuat gaya inline. Di tim kami, kami telah memutuskan bahwa gaya sebaris tidak dapat dibaca dan tidak dapat dipertahankan. Dan, setelah melihat secara langsung bagaimana gaya inline membuat mendukung aplikasi sepenuhnya tidak dapat ditoleransi, saya harus setuju. Saya benar-benar mencegah gaya inline.
sumber
Masalah dengan gaya sebaris adalah Kebijakan Keamanan Konten (CSP) menjadi lebih umum, yang tidak memungkinkannya. Oleh karena itu, saya sarankan menghindari gaya sebaris sepenuhnya.
Memperbarui: Untuk menjelaskan lebih lanjut, CSP adalah tajuk HTTP yang dikirim oleh server yang membatasi konten apa yang dapat muncul pada halaman. Ini hanyalah mitigasi lebih lanjut yang dapat diterapkan ke server untuk menghentikan penyerang dari melakukan sesuatu yang nakal jika pengembang kode situs buruk.
Tujuan dari sebagian besar pembatasan ini adalah untuk menghentikan serangan XSS (cross-site scripting). XSS adalah tempat penyerang menemukan cara untuk memasukkan javascript sendiri di halaman Anda (misalnya, jika saya membuat nama pengguna saya
bob<SCRIPT>alert("hello")</SCRIPT>
dan kemudian mengirim komentar, dan Anda mengunjungi halaman, itu tidak akan menampilkan peringatan). Pengembang harus menolak kemampuan untuk memiliki pengguna menambahkan konten seperti ini ke situs, tetapi kalau-kalau mereka membuat kesalahan, maka CSP memblokir halaman dari memuat jika menemukanscript>
tag.CSP hanyalah tingkat perlindungan ekstra bagi pengembang untuk memastikan jika mereka melakukan kesalahan, bahwa penyerang tidak dapat menyebabkan masalah bagi pengunjung ke situs itu.
Jadi itu semua adalah XSS, tetapi bagaimana jika penyerang tidak dapat memasukkan
<script>
tag tetapi dapat menyertakan<style>
tag atau menyertakan astyle=
parameter pada tag? Lalu dia mungkin bisa mengubah tampilan situs sedemikian rupa sehingga Anda tertipu untuk mengklik tombol yang salah, atau masalah lain. Ini jauh dari masalah, tetapi masih sesuatu yang harus dihindari, dan CSP melakukan itu untuk Anda.Sumber daya yang baik untuk menguji situs untuk CSP adalah https://securityheaders.io/
Anda dapat membaca lebih lanjut tentang CSP di: http://www.html5rocks.com/en/tutorials/security/content-security-policy/
sumber
unsafe-inline
kebijakan tersebut. Kebijakan ini memungkinkan pembatasan dari elemen style<style>
untuk tidak gaya inline diterapkan atribut gaya elemen ini:<div style="">
. Karena pertanyaan di atas mengacu pada atribut style, ini sepertinya saran yang buruk untuk menghindari gaya inline sepenuhnya. Jugareact
disarankan untuk memindahkan semua CSS ke JS: github.com/reactjs/react-future/blob/master/04%20-%20Layout/…unsafe-inline
menonaktifkan semua bentuk gaya sebaris termasuk pada atribut gaya. Anda secara terprogram dapat menggunakan API gaya pada suatu elemen melalui JS (mis.elem.style.color = 'blue';
), Tetapi Anda tidak bisa mengatur atribut style pada suatu elemen (seperti'unsafe-inline'
dalam arahan skrip-src yang melarang tag skrip inline, tetapi jugaonclick
atribut dan teman.)Dibandingkan dengan menulis gaya Anda dalam file css, atribut gaya React memiliki keuntungan sebagai berikut :
Namun, atribut style React hadir dengan beberapa kelemahan - Anda tidak bisa
Menggunakan CSS di JS, Anda bisa mendapatkan semua keuntungan dari tag gaya, tanpa kekurangannya . Sampai hari ini ada beberapa css populer yang didukung dengan baik di js-libraries, termasuk: Emotion, Styled-Components, dan Radium. Pustaka-pustaka itu untuk css jenis apa Bereaksi terhadap HTML. Mereka memungkinkan Anda untuk menulis CSS dan mengontrol CSS Anda dalam kode JS Anda.
mari kita bandingkan bagaimana kode kita akan mencari penataan elemen sederhana. Kami akan merancang div "hello world" sehingga tampil besar di desktop, dan lebih kecil di seluler.
Menggunakan atribut style
Karena kueri media tidak dimungkinkan dalam tag gaya, kita harus menambahkan className ke elemen dan menambahkan aturan css.
Menggunakan tag 10 css Emotion
Emosi juga mendukung string template serta komponen gaya. Jadi, jika Anda mau, Anda bisa menulis:
Di balik tudung "Css in JS" menggunakan kelas css. Emosi secara khusus dibangun dengan kinerja dalam pikiran, dan menggunakan caching. Dibandingkan dengan Bereaksi atribut gaya Css di JS akan memberikan kinerja yang lebih baik.
Praktik terbaik
Berikut adalah beberapa praktik terbaik yang saya rekomendasikan:
Pola pengkodean yang bereaksi adalah komponen yang dienkapsulasi - HTML dan JS yang mengontrol komponen ditulis dalam satu file. Di situlah kode css / style Anda untuk menata komponen yang dimiliki.
Bila perlu, tambahkan alat penata gaya ke komponen Anda. Dengan cara ini Anda dapat menggunakan kembali kode dan gaya yang ditulis dalam komponen anak, dan menyesuaikannya dengan kebutuhan spesifik Anda oleh komponen induk.
sumber
Anda dapat menggunakan StrCSS juga, itu menciptakan nama kelas yang terisolasi dan banyak lagi! Kode contoh akan terlihat seperti. Anda dapat (opsional) menginstal ekstensi VSCode dari Visual Studio Marketplace untuk dukungan penyorotan sintaks!
sumber: strcss
sumber
Beberapa waktu kita perlu mendesain beberapa elemen dari suatu komponen, tetapi jika kita harus menampilkan hanya komponen itu atau gaya yang kurang dari itu daripada menggunakan kelas CSS kita pergi untuk gaya inline dalam bereaksi js. gaya inline reactjs sama dengan gaya inline HTML hanya nama properti yang sedikit berbeda
Tulis gaya Anda di tag apa pun menggunakan style = {{prop: "value"}}
sumber
Pembaruan 2020: Praktik terbaik adalah menggunakan perpustakaan yang telah melakukan kerja keras untuk Anda dan tidak membunuh tim Anda ketika Anda beralih seperti yang ditunjukkan oleh jawaban yang diterima semula di video ini (masih relevan). Juga hanya untuk memahami tren, ini adalah grafik yang sangat membantu . Setelah melakukan penelitian sendiri tentang ini, saya memilih untuk menggunakan Emosi untuk proyek-proyek baru saya dan terbukti sangat fleksibel dan skala.
Mengingat bahwa jawaban yang paling banyak dipilih dari 2015 merekomendasikan Radium yang sekarang diturunkan ke mode pemeliharaan . Jadi sepertinya masuk akal untuk menambahkan daftar alternatif. The pasca penghentian Radium menunjukkan beberapa perpustakaan. Setiap situs yang ditautkan memiliki contoh yang tersedia sehingga saya tidak akan menyalin dan menempelkan kode di sini.
sumber
Pokoknya inline css tidak pernah direkomendasikan. Kami menggunakan komponen bergaya dalam proyek kami yang didasarkan pada JSS. Ini melindungi css overriding dengan menambahkan nama kelas dinamis pada komponen. Anda juga dapat menambahkan nilai css berdasarkan props yang diteruskan.
sumber