คำตอบของ @ jpdelatorre นั้นยอดเยี่ยมในการเน้นเหตุผลทั่วไปว่าทำไมส่วนประกอบของ React จึงสามารถสร้างการแสดงผลซ้ำได้
ฉันแค่อยากจะดำดิ่งลึกลงไปในตัวอย่างหนึ่ง: เมื่ออุปกรณ์เปลี่ยนไป การแก้ไขปัญหาสิ่งที่ก่อให้เกิดการตอบสนององค์ประกอบอีกครั้งทำให้เป็นปัญหาที่พบบ่อยและในประสบการณ์ของฉันมากครั้งที่ติดตามการลงปัญหานี้เกี่ยวข้องกับการกำหนดอุปกรณ์ประกอบฉากที่มีการเปลี่ยนแปลง
ตอบสนองต่อองค์ประกอบแสดงผลใหม่ทุกครั้งที่ได้รับอุปกรณ์ประกอบฉากใหม่ พวกเขาสามารถรับอุปกรณ์ใหม่เช่น:
<MyComponent prop1={currentPosition} prop2={myVariable} />
หรือถ้าMyComponent
เชื่อมต่อกับที่เก็บ redux:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
เมื่อใดก็ตามที่ค่าของprop1
, prop2
, prop3
หรือprop4
การเปลี่ยนแปลงที่MyComponent
จะ re-ทำให้ ด้วยอุปกรณ์ประกอบฉาก 4 ชุดจึงไม่ยากเกินไปที่จะติดตามว่าอุปกรณ์ประกอบฉากใดเปลี่ยนแปลงไปโดยการวางconsole.log(this.props)
จุดเริ่มต้นของrender
บล็อก อย่างไรก็ตามด้วยองค์ประกอบที่ซับซ้อนมากขึ้นและอุปกรณ์ประกอบฉากมากขึ้นวิธีนี้ไม่สามารถป้องกันได้
ต่อไปนี้เป็นวิธีที่มีประโยชน์ (ใช้lodashเพื่อความสะดวก) เพื่อพิจารณาว่าการเปลี่ยนแปลง prop ใดที่ทำให้องค์ประกอบแสดงผลอีกครั้ง:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
การเพิ่มตัวอย่างนี้ไปยังองค์ประกอบของคุณสามารถช่วยเปิดเผยผู้ร้ายที่ก่อให้เกิดปัญหาอีกครั้งและหลายครั้งสิ่งนี้ช่วยให้ข้อมูลที่ไม่จำเป็นถูกส่งไปยังส่วนประกอบต่างๆ
shouldComponentUpdate
เพื่อปิดใช้งานการอัพเดทองค์ประกอบอัตโนมัติแล้วเริ่มติดตามจากที่นั่น ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่: facebook.github.io/react/docs/optimizing-performance.html