ให้เรตสมาชิก: 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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
การเชื่อม Pgadmin III กับ SSL Certificate ให้กับ Website ผ่าน DirectAdmin อย่างไร
โดย kkeinezung ส 22 ก.ย. 2018 6:54 pm บอร์ด SQL - Database
0
3
ส 22 ก.ย. 2018 6:54 pm โดย kkeinezung
R - phpBB
โดย Ittichai_chupol ส 22 ก.ย. 2018 6:51 pm บอร์ด M070 - อิทธิชัย ชูผล
0
3
ส 22 ก.ย. 2018 6:51 pm โดย Ittichai_chupol
เขาวัง สิ่งคู่บ้านเพชรบุรี
โดย Ittichai_chupol ส 22 ก.ย. 2018 3:52 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
10
ส 22 ก.ย. 2018 3:52 pm โดย Ittichai_chupol
งานประจำวันที่ 22 กันยายน 2561
โดย muneela ส 22 ก.ย. 2018 10:38 am บอร์ด M068 - มุนีลา หมัดบาซา
1
5
ส 22 ก.ย. 2018 7:17 pm โดย muneela
งานประจำวันที่ 22 กันยายน 2561
โดย tatiya ส 22 ก.ย. 2018 10:02 am บอร์ด M065 - ตติยะ นาชัย
1
4
ส 22 ก.ย. 2018 7:45 pm โดย tatiya
งานประจำวันที่ 22 มิถุนายน 2561
โดย Ittichai_chupol ส 22 ก.ย. 2018 9:50 am บอร์ด M070 - อิทธิชัย ชูผล
1
9
ส 22 ก.ย. 2018 7:16 pm โดย Ittichai_chupol
R-mdsoft_purchases_order_print
โดย tatiya ศ 21 ก.ย. 2018 7:02 pm บอร์ด M065 - ตติยะ นาชัย
1
8
ส 22 ก.ย. 2018 7:05 pm โดย tatiya
Logo ThailandHotel
โดย tai14 ศ 21 ก.ย. 2018 3:53 pm บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
0
6
ศ 21 ก.ย. 2018 3:53 pm โดย tai14
Thaivi Web Upgrade List
โดย mindphp ศ 21 ก.ย. 2018 1:55 pm บอร์ด phpBB3 Project
2
5
ส 22 ก.ย. 2018 5:10 pm โดย thatsawan
R - mdsoft_ziri_invoice_print - ใบอินวอยซ์ (MT24)
โดย prakon ศ 21 ก.ย. 2018 10:15 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
11
ศ 21 ก.ย. 2018 7:05 pm โดย prakon
งานประจำวันที่ 21 กันยายน 2561
โดย prakon ศ 21 ก.ย. 2018 9:44 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
17
ศ 21 ก.ย. 2018 9:46 am โดย prakon
งานประจำวันที่ 21 กันยายน 2561
โดย Ittichai_chupol ศ 21 ก.ย. 2018 9:44 am บอร์ด M070 - อิทธิชัย ชูผล
1
13
ศ 21 ก.ย. 2018 6:29 pm โดย Ittichai_chupol
งานประจำวันที่ 21 กันยายน 2561
โดย muneela ศ 21 ก.ย. 2018 9:37 am บอร์ด M068 - มุนีลา หมัดบาซา
1
13
ศ 21 ก.ย. 2018 6:26 pm โดย muneela
งานประจำวันที่ 21 กันยายน 2561
โดย tatiya ศ 21 ก.ย. 2018 9:35 am บอร์ด M065 - ตติยะ นาชัย
1
6
ส 22 ก.ย. 2018 7:17 pm โดย tatiya
งานประจำวันที่ 21 กันยายน 2561
โดย pprn ศ 21 ก.ย. 2018 9:17 am บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
1
8
ศ 21 ก.ย. 2018 6:12 pm โดย pprn
งานประจำวันที่ 21 กันยายน 2561
โดย tai14 ศ 21 ก.ย. 2018 9:11 am บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
1
6
ศ 21 ก.ย. 2018 6:18 pm โดย tai14
R - mod_jshopping_products_reviews โมดูลการรีวิวสินค้า
โดย pprn พฤ 20 ก.ย. 2018 6:58 pm บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
2
9
ศ 21 ก.ย. 2018 6:12 pm โดย pprn
phpbb ติดตั้งภาษาไทยไม่ได้
โดย Ittichai_chupol พฤ 20 ก.ย. 2018 6:52 pm บอร์ด Programming - PHP
3
38
ศ 21 ก.ย. 2018 11:09 am โดย Ittichai_chupol
R-mdsoft_create_generate_opening_entries
โดย tatiya พฤ 20 ก.ย. 2018 6:36 pm บอร์ด M065 - ตติยะ นาชัย
1
8
พฤ 20 ก.ย. 2018 9:42 pm โดย tatiya
R-mdsoft_change_product_type_stockable
โดย tatiya พฤ 20 ก.ย. 2018 6:32 pm บอร์ด M065 - ตติยะ นาชัย
1
8
พฤ 20 ก.ย. 2018 9:08 pm โดย tatiya