ให้เรตสมาชิก: 3 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

การเพิ่ม Lifecycle ลงใน Class

     ในหนึ่งแอพพลิเคชั่นจะมีหลาย Component โดนแยก UI ออกเป็นส่วนๆ สิ่งที่สำคัญที่สุดคือเวลาที่เกิดความเสียหายขึ้น เราจะได้แก้ไขเฉพาะที่ มีผลดีคือ แก้ไขง่าย รวดเร็ว และไม่ทำให้เกิดความเสียหายทั้งหมด 

     Lifecycle แปลเป็นไทยคือ วงเวียนชีวิต ในที่นี้หมายถึงวงเวียนชีวิตของ Method ใน Component แต่ละตัว มีวิธีการเกี่ยวกับ Lifecycle หลายแบบซึ่งเราสามารถนำไปใช้ในแต่ละช่วงเวลาของเหตูการณ์นั้นๆได้
Method ที่นำหน้าด้วย Will ถูกเรียกก่อนที่มีบางสิ่งบางอย่างเกิดขึ้นและ Method ที่นำหน้าด้วย Did ถูกเรียกหลังจากมีบางสิ่งบางอย่างเกิดขึ้น

 

ในตัวอย่างต่อไปนี้ จะอธิบายถึงการทำงานของ Lifecycle ของ Component Clock

     1.  เมื่อเราต้องการเซ็ตเวลา Clock จะแสดงผลที่ DOM ก่อน เราเรียกสิ่งนี้ว่า "mounting" ใน React

     2.  เมื่อเราต้องการลบเวลา DOM ที่ถูกสร้างขึ้นโดย Clock จะถูกลบออก เราเรียกสิ่งนี้ว่า "unmounting" ใน React

     เราสามารถประกาศ Method พิเศษบน Component ได้ เพื่อ Run โค้ดบางส่วน  Method นี้เรียกว่า "Lifecycle hook" :

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {

  }

  componentWillUnmount() {

  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

     Hook componentDidMount() จะ Run หลังจากที่ Component แสดงผลไปที่ DOM

     Example ตัวอย่างโค้ดเวลา ที่มีการ save timerID ไว้ :

componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

     การดึง timerID ออกใน componentWillUnmount() Lifecycle hook  :

componentWillUnmount() {
    clearInterval(this.timerID);
  }

     สุดท้ายนี้เราจะเรียก Method tick() ของ Component Clock แล้วทำการ setState Clock ก็จะทำการเรียก ทุกๆวินาที 

     เราจะได้โค้ดเต็มของ Component Clock ดังนี้ :

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);

 

สรุปการทำงานของ Component Clock

  • เมื่อ Element <Clock /> เข้ามาที่ ReactDOM.render() จากนั้นจะเรียก constructor ของ Component Clock เนื่องจาก Clock ต้องการแสดงเวลาปัจจุบัน

  • จากนั้น Method render() จะทำหน้าที่เป็น Output ส่วน React จะอัพเดท DOM ให้มีค่าตรงกับ Output

  • เมื่อ Output ของ Clock ถูกส่งไปที่ DOM ตัว React จะเรียก componentDidMount() จากนั้น Clock จะขอให้ Browser ตั้งเวลาเพื่อเรียก Method trick() หนึ่งครั้งต่อวินาที

  • ถ้า Clock เคยถูกลบออกจาก DOM ตัว React จะเรียก componentWillUnmount() เพื่อทำให้ Timer หยุด

 

ข้อมูลอ้างอิง : https://reactjs.org

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Features Review : Plugin Editors XTD Multicontent untuk mengeluarkan artikel dari Master Site ke Web Clien
โดย abdkode อ 19 ก.พ. 2019 6:52 pm บอร์ด Bahasa Language
0
1
อ 19 ก.พ. 2019 6:52 pm โดย abdkode
สิ่งที่อยากที่สุดของการทำงาน
โดย จันนุสรณ์ ดีแก่ อ 19 ก.พ. 2019 6:52 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
5
อ 19 ก.พ. 2019 6:52 pm โดย จันนุสรณ์ ดีแก่
Features Review : Mod MDFiles Popular modul menyenaraikan fail popular
โดย abdkode อ 19 ก.พ. 2019 5:41 pm บอร์ด Bahasa Language
0
2
อ 19 ก.พ. 2019 5:41 pm โดย abdkode
Features Review : Mod MDFiles Featured memaparkan fail-fail yang dipilih dari MDFile untuk dipaparkan pada Joomla
โดย abdkode อ 19 ก.พ. 2019 4:39 pm บอร์ด Bahasa Language
0
1
อ 19 ก.พ. 2019 4:39 pm โดย abdkode
Features Review : Components Mjform komponen untuk membuat borang laman web
โดย abdkode อ 19 ก.พ. 2019 3:23 pm บอร์ด Bahasa Language
0
6
อ 19 ก.พ. 2019 3:23 pm โดย abdkode
อบากทราบวิธีการ ส่งค่ากลับมายัง ส่วนที่เป็น sub comment ลาสุด ใน phpbb
โดย Ittichai_chupol อ 19 ก.พ. 2019 11:45 am บอร์ด Programming - PHP
0
4
อ 19 ก.พ. 2019 11:45 am โดย Ittichai_chupol
งานประจำวันที่ 19 กุมภาพันธ์ 2562
โดย Four อ 19 ก.พ. 2019 10:36 am บอร์ด M077 - อิษยา งามสอาด
2
3
อ 19 ก.พ. 2019 7:21 pm โดย Four
คู่มือวิธีการลบแบบเก็บไว้ในถังขยะใน phpbb โดยแอดมินเท่านั้นที่สามารถเห็นในส่วนนี้ User อื่นไม่สามารถทำได้
โดย จันนุสรณ์ ดีแก่ อ 19 ก.พ. 2019 9:15 am บอร์ด phpBB user Guide Knowledge
0
14
อ 19 ก.พ. 2019 9:15 am โดย จันนุสรณ์ ดีแก่
R - mdsoft_partner_fields Module ปรับเพิ่มฟิลด์ lead > partner
โดย thatsawan จ 18 ก.พ. 2019 11:18 pm บอร์ด MlineCRM Line + MD-CRM
1
3
อ 19 ก.พ. 2019 6:51 am โดย mindphp
อยากทราบวิธีการดูดข้อมูลจากเว็บอื่น
โดย newbie จ 18 ก.พ. 2019 3:05 pm บอร์ด Programming - PHP
0
20
จ 18 ก.พ. 2019 3:05 pm โดย newbie
Q - ตัว search tools ใน Joomla 4 ลอง search แล้วไม่สามารถเคลียได้
โดย Parichat ส 16 ก.พ. 2019 6:57 pm บอร์ด Joomla Dev
0
3
ส 16 ก.พ. 2019 6:57 pm โดย Parichat
อยากทราบวิธีการ ปิด ไม่ใช้ เทมเพลตกลายเป็น เว็บ responsive ใน phpbb
โดย Ittichai_chupol ส 16 ก.พ. 2019 6:56 pm บอร์ด Programming - PHP
0
19
ส 16 ก.พ. 2019 6:56 pm โดย Ittichai_chupol
อยากทราบวิธีการแก้ไข้ ปัญหา ขณะเปิดใช้งาน Extension ใน phpbb
โดย Ittichai_chupol ส 16 ก.พ. 2019 6:22 pm บอร์ด Programming - PHP
0
17
ส 16 ก.พ. 2019 6:22 pm โดย Ittichai_chupol
อยากทราบวิธีการตรวจสอบสิทธิ์ ของผู้ใช้งาน
โดย Ittichai_chupol ส 16 ก.พ. 2019 1:26 pm บอร์ด Programming - PHP
0
22
ส 16 ก.พ. 2019 1:26 pm โดย Ittichai_chupol
วิธีแก้ปัญหาบันทึกข้อมูลไม่ลงใน Joomla Version 4
โดย Parichat ส 16 ก.พ. 2019 11:49 am บอร์ด Joomla Dev
0
2
ส 16 ก.พ. 2019 11:49 am โดย Parichat
ทำความรู้จักกับ วิธีจัดการการแจ้งเตือน พร้อมวิธีการบันทึกการแจ้งเตือนว่าอ่านแล้ว ในหลายๆหัวข้อพร้อมกัน
โดย จันนุสรณ์ ดีแก่ ส 16 ก.พ. 2019 10:26 am บอร์ด phpBB user Guide Knowledge
0
27
ส 16 ก.พ. 2019 10:26 am โดย จันนุสรณ์ ดีแก่
งานประจำวันที่ 16 กุมภาพันธ์ 2562
โดย Four ส 16 ก.พ. 2019 9:47 am บอร์ด M077 - อิษยา งามสอาด
1
11
ส 16 ก.พ. 2019 7:13 pm โดย Four
Mod MDFiles Popular 모듈 소개 MDFile에서 파일을 가져와 표시
โดย wipaporn ศ 15 ก.พ. 2019 6:06 pm บอร์ด korean Language - 한국어
0
19
ศ 15 ก.พ. 2019 6:06 pm โดย wipaporn
MDFiles Featured modules를 소개하면 MDFile에서 파일을 가져와 보여준다.
โดย wipaporn ศ 15 ก.พ. 2019 6:06 pm บอร์ด korean Language - 한국어
0
20
ศ 15 ก.พ. 2019 6:06 pm โดย wipaporn
Q - เกิดerror โค้ด ขึ้นว่า AttributeError: 'TextTestResult' object has no attribute 'openwed_Login'
โดย ธวัชชัย แสนหาญ ศ 15 ก.พ. 2019 5:55 pm บอร์ด Programming - C/C++ & java & Python
0
30
ศ 15 ก.พ. 2019 5:55 pm โดย ธวัชชัย แสนหาญ