এখনও অনেক "সেরা অনুশীলন" নেই। প্রতিক্রিয়া উপাদানগুলির জন্য আমাদের মধ্যে যারা ইনলাইন-শৈলী ব্যবহার করছে তারা এখনও অনেক বেশি পরীক্ষামূলক।
এমন অনেকগুলি পন্থা রয়েছে যা বন্যভাবে পরিবর্তিত হয়: ইনলাইন-শৈলীর তুলনামূলক চার্ট প্রতিক্রিয়া জানান
সব অথবা কিছুই না?
আমরা "স্টাইল" হিসাবে যা উল্লেখ করি তাতে আসলে বেশ কয়েকটি ধারণা অন্তর্ভুক্ত থাকে:
- বিন্যাস - কোনও উপাদান / উপাদান অন্যের সাথে সম্পর্কের ক্ষেত্রে কীভাবে দেখায়
- উপস্থিতি - একটি উপাদান / উপাদান বৈশিষ্ট্য
- আচরণ এবং রাষ্ট্র - কোনও উপাদান / উপাদান কোনও প্রদত্ত অবস্থায় কীভাবে দেখায়
স্টেট-স্টাইল দিয়ে শুরু করুন
প্রতিক্রিয়া ইতিমধ্যে আপনার উপাদানগুলির অবস্থা পরিচালনা করছে, এটি আপনার উপাদান যুক্তির সাথে সমষ্টি করার জন্য স্টাইলের অবস্থা এবং আচরণকে একটি প্রাকৃতিক ফিট করে।
শর্তসাপেক্ষে রাজ্য-শ্রেণীর সাথে রেন্ডার করার জন্য উপাদানগুলি তৈরির পরিবর্তে, সরাসরি স্টেট-স্টাইল যুক্ত করার বিষয়টি বিবেচনা করুন:
// 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
) এবং মিডিয়া-কোয়েরিগুলি কাঁচা প্রতিক্রিয়াতে বেদনাদায়ক are
আমি রেডিয়াম পছন্দ করি কারণ এই শক্ত অংশগুলির জন্য সিনট্যাক্সটি 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>
}
});
আরও পর্যবেক্ষণ
এই বছরের শুরুতে ইউরোপে প্রতিক্রিয়া: এগুলি আরও বিস্তারিতভাবে আলোচনা করেছি: ইনলাইন স্টাইলগুলি এবং যখন 'কেবল CSS ব্যবহার করা' ভাল ।
আপনি পথে নতুন আবিষ্কার করার সময় সাহায্য করতে পেরে আমি আনন্দিত :) আমাকে হিট করুন -> @ ক্যান্তাস্টিক