Apa sebenarnya keuntungan menggunakan StyleSheet.create()
vs objek biasa?
const styles = StyleSheet.create({
container: {
flex: 1
}
}
Vs.
const styles = {
container: {
flex: 1
}
}
react-native
corasan
sumber
sumber
Jawaban:
Mengutip langsung dari bagian komentar StyleSheet.js dari React native
StyleSheet juga memvalidasi konten stylesheet Anda. Jadi, kesalahan apa pun dari properti gaya yang salah ditampilkan pada saat kompilasi bukan pada waktu proses ketika StyleSheet benar-benar diimplementasikan.
sumber
StyleSheet.create({styles...})
lebih baik / lebih cepat dari{styles...}
. Kodenya sama bersihnya, dan Anda juga menggunakan penamaan alih-alih sebaris. Adakah yang bisa menjelaskannya?StyleSheet
memberikan validasi pada kompilasiStyleSheet.create
dan Objek biasa, tidak sebaris vs konstanta di luar kelasTidak ada manfaatnya. Titik.
Mitos 1:
StyleSheet
Lebih BerkinerjaSama sekali tidak ada perbedaan kinerja antara
StyleSheet
dan objek yang dideklarasikan di luarrender
(akan berbeda jika Anda membuat objek baru di dalamrender
setiap saat). Perbedaan kinerja hanyalah mitos.Asal mula mitos kemungkinan besar karena tim React Native mencoba melakukan ini, tetapi mereka tidak berhasil. Tidak ada di dalam dokumen resmi Anda akan menemukan apa pun tentang kinerja: https://facebook.github.io/react-native/docs/stylesheet.html , sementara kode sumber menyatakan "belum diterapkan": https://github.com/ facebook / react-native / blob / master / Libraries / StyleSheet / StyleSheet.js # L207
Mitos 2:
StyleSheet
memvalidasi objek gaya pada waktu kompilasiIni tidak benar. JavaScript biasa tidak dapat memvalidasi objek pada waktu kompilasi.
Dua hal:
sumber
StyleSheet.create( {x:{flex: "1"}} )
akan gagal saat runtime, seperti yang akan sebuah naskah cek pada ini pada waktu kompilasi.Jawaban yang diterima bukanlah jawaban untuk pertanyaan OP.
Pertanyaannya bukanlah perbedaan antara gaya sebaris dan di
const
luar kelas, tetapi mengapa kita harus menggunakanStyleSheet.create
objek biasa sebagai pengganti.Setelah sedikit meneliti apa yang saya temukan adalah yang berikut (perbarui jika Anda memiliki info). Keuntungan dari
StyleSheet.create
harus sebagai berikut:sumber
Dulu dianggap bahwa menggunakan stylesheet lebih performant, dan itu dianjurkan untuk alasan ini oleh tim RN sampai versi 0.57, tetapi sekarang tidak lagi direkomendasikan sebagai benar menunjukkan di jawaban lain untuk pertanyaan ini.
The dokumentasi RN sekarang merekomendasikan StyleSheet karena alasan berikut, meskipun saya pikir alasan ini akan berlaku untuk benda-benda biasa yang dibuat di luar fungsi render:
Jadi apa yang saya pikir adalah manfaat yang mungkin menggunakan Stylesheet atas benda biasa?
1) Meskipun klaim yang bertentangan pengujian saya di RN v0.59.10 menunjukkan bahwa Anda lakukan mendapatkan beberapa validasi saat memanggil
StyleSheet.create()
dan naskah (dan mungkin mengalir) juga akan melaporkan kesalahan pada waktu kompilasi. Bahkan tanpa pemeriksaan waktu kompilasi, saya pikir masih bermanfaat untuk melakukan validasi run time gaya sebelum digunakan untuk rendering, terutama di mana komponen yang menggunakan gaya tersebut dapat dirender secara bersyarat. Ini akan memungkinkan kesalahan tersebut diambil tanpa harus menguji semua skenario rendering.2) Mengingat bahwa Stylesheet yang direkomendasikan oleh tim RN mereka mungkin masih memiliki harapan menggunakan stylesheet untuk meningkatkan kinerja di masa depan, dan mereka mungkin memiliki perbaikan lain yang mungkin dalam pikiran juga, misalnya:
3)
StyleSheet.create()
Validasi run-time saat ini berguna, tetapi agak terbatas. Tampaknya dibatasi pada jenis pemeriksaan yang akan Anda dapatkan dengan aliran atau skrip ketikan, jadi akan mengambil katakanflex: "1"
atauborderStyle: "rubbish"
, tetapi tidakwidth: "rubbish"
karena itu bisa menjadi string persentase. Ada kemungkinan bahwa tim RN dapat meningkatkan validasi tersebut di masa mendatang dengan memeriksa hal-hal seperti string persentase, atau batas rentang, atau Anda dapat menggabungkanStyleSheet.create()
fungsi Anda sendiri untuk melakukan validasi yang lebih ekstensif.4) Dengan menggunakan StyleSheet, Anda mungkin mempermudah transisi ke alternatif / ekstensi pihak ketiga seperti react-native-extended-stylesheet yang menawarkan lebih banyak.
sumber
Membuat gaya Anda melalui
StyleSheet.create
akan melewati validasi hanya ketika variabel global__DEV__
disetel ke true (atau saat berjalan di dalam emulator Android atau IOS, lihat variabel React Native DEV dan PROD )Kode sumber fungsi cukup sederhana:
Saya akan merekomendasikan menggunakannya karena ia melakukan validasi run-time selama pengembangan, juga membekukan objek.
sumber
Saya tidak menemukan perbedaan apa pun di antara
StyleSheet
dan objek biasa, kecuali mengetik validasi di TypeScript.Misalnya, ini (perhatikan perbedaan pengetikan):
sama dengan ini:
sumber