अभी तक बहुत सारे "सर्वश्रेष्ठ अभ्यास" नहीं हैं। हम में से जो रिएक्ट घटकों के लिए इनलाइन-शैलियों का उपयोग कर रहे हैं, वे अभी भी बहुत प्रयोग कर रहे हैं।
ऐसे कई दृष्टिकोण हैं जो बेतहाशा भिन्न होते हैं: रिएक्ट इनलाइन-शैली की तुलनात्मक चार्ट
सभी या कुछ भी नहीं?
जिसे हम "शैली" के रूप में संदर्भित करते हैं वास्तव में काफी कुछ अवधारणाएं शामिल हैं:
- लेआउट - एक तत्व / घटक दूसरों के संबंध में कैसे दिखता है
- उपस्थिति - एक तत्व / घटक की विशेषताएं
- व्यवहार और अवस्था - किसी दिए गए राज्य में एक तत्व / घटक कैसे दिखता है
राज्य-शैलियों से शुरू करें
प्रतिक्रिया पहले से ही आपके घटकों की स्थिति का प्रबंधन कर रही है, यह राज्य की शैली और व्यवहार को आपके घटक तर्क के साथ उपनिवेश के लिए एक प्राकृतिक फिट बनाता है।
सशर्त राज्य-कक्षाओं के साथ प्रस्तुत करने के लिए घटकों के निर्माण के बजाय, सीधे राज्य-शैलियों को जोड़ने पर विचार करें:
// 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 : {}} />
ध्यान दें कि हम शैली उपस्थिति के लिए एक वर्ग का उपयोग कर रहे हैं, लेकिन राज्य और व्यवहार के.is-
लिए किसी भी उपसर्ग वर्ग का उपयोग नहीं कर रहे हैं ।
हम कई राज्यों के लिए समर्थन जोड़ने के लिए Object.assign
(ES6) या _.extend
(अंडरस्कोर / लॉश) का उपयोग कर सकते हैं :
// Supporting multiple-states with inline-styles
<li 'todo-list__item'
style={Object.assign({}, item.complete && styles.complete, item.due && styles.due )}>
अनुकूलन और पुन: प्रयोज्य
अब जब हम Object.assign
इसका उपयोग कर रहे हैं तो यह बहुत आसान हो जाता है कि हम अपने घटक को विभिन्न शैलियों के साथ पुन: प्रयोज्य बना सकें। यदि हम डिफ़ॉल्ट शैलियों को ओवरराइड करना चाहते हैं, तो हम कॉल-साइट पर प्रॉप्स के साथ ऐसा कर सकते हैं, जैसे <TodoItem dueStyle={ fontWeight: "bold" } />
:। इस तरह लागू:
<li 'todo-list__item'
style={Object.assign({},
item.due && styles.due,
item.due && this.props.dueStyles)}>
ख़ाका
व्यक्तिगत रूप से, मैं इनलाइन लेआउट शैलियों के लिए सम्मोहक कारण नहीं देखता। वहाँ कई महान सीएसएस लेआउट सिस्टम हैं। मैं सिर्फ एक का उपयोग करेंगे।
उस ने कहा, लेआउट शैलियों को सीधे अपने घटक में न जोड़ें। अपने घटकों को लेआउट घटकों के साथ लपेटें। यहाँ एक उदाहरण है।
// 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>
लेआउट समर्थन के लिए, मैं अक्सर घटकों को डिज़ाइन करने का प्रयास करता हूं 100%
width
और height
।
दिखावट
यह "इनलाइन-शैली" बहस का सबसे विवादास्पद क्षेत्र है। अंततः, यह आपके डिजाइनिंग घटक और जावास्क्रिप्ट के साथ आपकी टीम के आराम पर निर्भर है।
एक बात निश्चित है, आपको एक पुस्तकालय की सहायता की आवश्यकता होगी। ब्राउज़र-स्टेट्स ( :hover
, :focus
), और मीडिया-क्वेश्चन कच्चे रिएक्ट में दर्दनाक हैं।
मुझे रेडियम पसंद है क्योंकि उन कठिन भागों के लिए वाक्य रचना SASS के मॉडल के लिए बनाया गया है।
कोड संगठन
अक्सर आप मॉड्यूल के बाहर एक स्टाइल ऑब्जेक्ट देखेंगे। एक टूडू-सूची घटक के लिए, यह कुछ इस तरह दिख सकता है:
var styles = {
root: {
display: "block"
},
item: {
color: "black"
complete: {
textDecoration: "line-through"
},
due: {
color: "red"
}
},
}
कार्य करता है
अपने टेम्पलेट में शैली तर्क का एक गुच्छा जोड़ने से थोड़ा गड़बड़ हो सकता है (जैसा कि ऊपर देखा गया है)। मुझे शैलियों की गणना करने के लिए गटर कार्य करना पसंद है:
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>
}
});
आगे देख रहे हैं
मैंने इन सभी पर इस साल की शुरुआत में रिएक्ट यूरोप में और अधिक विस्तार से चर्चा की: इनलाइन स्टाइल्स और जब यह 'बस सीएसएस का उपयोग करने के लिए' सबसे अच्छा है ।
मुझे मदद करने में खुशी हो रही है जब आप रास्ते में नई खोज करते हैं :) मुझे मारो -> @ शांतिवादी