Henüz pek çok "En İyi Uygulama" yok. React bileşenleri için satır içi stiller kullanan bizler hala çok deney yapıyoruz.
Çılgınca değişen bir takım yaklaşımlar vardır: Satır içi tarzı lib karşılaştırma çizelgesine tepki verin
Ya hep ya hiç?
"Stil" olarak adlandırdığımız şey aslında birkaç kavram içerir:
- Düzen - bir öğenin / bileşenin diğerleriyle ilişkide nasıl göründüğü
- Görünüm - bir elemanın / bileşenin özellikleri
- Davranış ve durum - bir öğenin / bileşenin belirli bir durumda nasıl göründüğü
Durum stilleriyle başlayın
React zaten bileşenlerinizin durumunu yönetiyor, bu durum ve davranış stillerini bileşen mantığınızla birlikte oturmak için doğal bir uyum haline getiriyor.
Koşullu durum sınıflarıyla oluşturulacak bileşenler oluşturmak yerine, doğrudan durum stilleri eklemeyi düşünün:
// Typical component with state-classes
<li
className={classnames({ 'todo-list__item': true, 'is-complete': item.complete })} />
// Using inline-styles for state
<li className='todo-list__item'
style={(item.complete) ? styles.complete : {}} />
Görünümü.is-
stilleştirmek için bir sınıf kullandığımızı, ancak artık durum ve davranış için önceden eklenmiş bir sınıf kullanmadığımızı unutmayın .
Birden çok durum için destek eklemek üzere Object.assign
(ES6) veya _.extend
(alt çizgi / lodash) kullanabiliriz:
// Supporting multiple-states with inline-styles
<li 'todo-list__item'
style={Object.assign({}, item.complete && styles.complete, item.due && styles.due )}>
Özelleştirme ve yeniden kullanılabilirlik
Şimdi kullandığımız Object.assign
için, bileşenimizi farklı stillerle tekrar kullanılabilir hale getirmek çok basit hale geliyor. Biz varsayılan stilleri geçersiz kılmak istiyorsak, sahne ile çağrı yerinde yapabilirsiniz, böylece gibi: <TodoItem dueStyle={ fontWeight: "bold" } />
. Bu şekilde uygulandı:
<li 'todo-list__item'
style={Object.assign({},
item.due && styles.due,
item.due && this.props.dueStyles)}>
Yerleşim
Şahsen, satır içi düzen stilleri için zorlayıcı bir neden görmüyorum. Orada bir dizi harika CSS mizanpaj sistemi var. Sadece birini kullanırdım.
Bununla birlikte, düzen stillerini doğrudan bileşeninize eklemeyin. Bileşenlerinizi mizanpaj bileşenleriyle sarın. İşte bir örnek.
// This couples your component to the layout system
// It reduces the reusability of your component
<UserBadge
className="col-xs-12 col-sm-6 col-md-8"
firstName="Michael"
lastName="Chan" />
// This is much easier to maintain and change
<div class="col-xs-12 col-sm-6 col-md-8">
<UserBadge
firstName="Michael"
lastName="Chan" />
</div>
Düzen desteği için, sık sık olmaya bileşenleri tasarlamak için deneyin 100%
width
ve height
.
Görünüm
Bu, "satır içi stil" tartışmasının en tartışmalı alanıdır. Sonuçta, JavaScript ile tasarımınızın bileşenine ve ekibinizin rahatlığına bağlıdır.
Kesin olan bir şey var, bir kütüphanenin yardımına ihtiyacınız olacak. Tarayıcı durumları ( :hover
, :focus
) ve medya sorguları ham Tepkimede acı vericidir.
Radium'u seviyorum çünkü bu sert parçaların sözdizimi SASS modelini modellemek için tasarlandı.
Kod organizasyonu
Genellikle modülün dışında bir stil nesnesi görürsünüz. Yapılacaklar listesi bileşeni için şöyle görünebilir:
var styles = {
root: {
display: "block"
},
item: {
color: "black"
complete: {
textDecoration: "line-through"
},
due: {
color: "red"
}
},
}
alıcı işlevleri
Şablonunuza bir grup stil mantığı eklemek biraz dağınık olabilir (yukarıda görüldüğü gibi). Stilleri hesaplamak için alıcı işlevleri oluşturmayı seviyorum:
React.createClass({
getStyles: function () {
return Object.assign(
{},
item.props.complete && styles.complete,
item.props.due && styles.due,
item.props.due && this.props.dueStyles
);
},
render: function () {
return <li style={this.getStyles()}>{this.props.item}</li>
}
});
Daha fazla izleme
Bunların hepsini bu yılın başlarında React Europe'da daha ayrıntılı olarak tartıştım: Satır İçi Stiller ve 'sadece CSS kullanmak' en iyisi olduğunda .
Yol boyunca yeni keşifler yapmak gibi ben yardım mutluyum :) Hit me up -> @chantastic