"แนวทางปฏิบัติที่ดีที่สุด" ยังมีไม่มาก พวกเราที่ใช้รูปแบบอินไลน์สำหรับองค์ประกอบ React ยังคงทำการทดลองอย่างมาก
มีหลายวิธีที่แตกต่างกันอย่างดุเดือด: ทำปฏิกิริยาแผนภูมิเปรียบเทียบ lib แบบอินไลน์
ทั้งหมดหรือไม่มีอะไร?
สิ่งที่เราเรียกว่า "สไตล์" จริง ๆ แล้วมีแนวคิดไม่กี่:
- เค้าโครง - ลักษณะองค์ประกอบ / ส่วนประกอบมีความสัมพันธ์กับผู้อื่นอย่างไร
- ลักษณะที่ปรากฏ - ลักษณะขององค์ประกอบ / ส่วนประกอบ
- พฤติกรรมและสถานะ - องค์ประกอบ / ส่วนประกอบมีลักษณะอย่างไรในสถานะที่กำหนด
เริ่มต้นด้วยลักษณะรัฐ
React กำลังจัดการสถานะของคอมโพเนนต์ของคุณอยู่แล้วซึ่งทำให้ลักษณะของสถานะและพฤติกรรมเหมาะสมกับการจัดวางด้วยตรรกะส่วนประกอบของคุณ
แทนที่จะสร้างส่วนประกอบเพื่อสร้างการแสดงผลแบบมีเงื่อนไขให้พิจารณาเพิ่มรูปแบบสถานะโดยตรง:
// 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
(ขีดล่าง / lodash) เพื่อเพิ่มการสนับสนุนสำหรับหลายรัฐ:
// 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)}>
แบบ
โดยส่วนตัวฉันไม่เห็นเหตุผลที่น่าสนใจสำหรับสไตล์เลย์เอาต์แบบอินไลน์ มีระบบโครงร่าง CSS ที่ยอดเยี่ยมมากมาย ฉันแค่ใช้มัน
ที่กล่าวว่าอย่าเพิ่มสไตล์โครงร่างลงในองค์ประกอบของคุณโดยตรง ล้อมรอบส่วนประกอบของคุณด้วยส่วนประกอบเค้าโครง นี่คือตัวอย่าง
// 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
การปรากฏ
นี่คือพื้นที่ที่ถกเถียงกันมากที่สุดของการอภิปราย "แบบอินไลน์" ในที่สุดมันก็ขึ้นอยู่กับองค์ประกอบของการออกแบบและความสะดวกสบายของทีมด้วย JavaScript
สิ่งหนึ่งที่แน่นอนคือคุณจะต้องได้รับความช่วยเหลือจากห้องสมุด เบราว์เซอร์ - อเมริกา ( :hover
, :focus
), และสื่อ - แบบสอบถามมีความเจ็บปวดในการตอบสนองดิบ
ฉันชอบเรเดียมเนื่องจากวากยสัมพันธ์สำหรับส่วนที่ยากเหล่านั้นได้รับการออกแบบให้เป็นแบบจำลองของ SASS
รหัสองค์กร
บ่อยครั้งที่คุณจะเห็นวัตถุสไตล์นอกโมดูล สำหรับองค์ประกอบสิ่งที่ต้องทำรายการมันอาจมีลักษณะเช่นนี้:
var styles = {
root: {
display: "block"
},
item: {
color: "black"
complete: {
textDecoration: "line-through"
},
due: {
color: "red"
}
},
}
ฟังก์ชั่นทะเยอทะยาน
การเพิ่มตรรกะของสไตล์ให้กับเทมเพลตของคุณอาจทำให้เกิดความยุ่งเหยิงเล็กน้อย (ดังที่เห็นด้านบน) ฉันต้องการสร้างฟังก์ชั่น getter เพื่อคำนวณสไตล์:
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>
}
});
ดูเพิ่มเติม
ผมพูดสิ่งเหล่านี้ในรายละเอียดเพิ่มเติมได้ที่ตอบสนองยุโรปปีก่อนหน้านี้: อินไลน์ Styles และเมื่อดีที่สุดที่จะเพียง CSS ใช้ '
ฉันมีความสุขที่ได้ช่วยคุณค้นพบสิ่งใหม่ ๆ ตลอดเส้นทาง :) ตีฉัน -> @chantastic