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

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

องค์ประกอบและการสืบทอด

     React มี Component ที่มีประสิทธิภาพ และเราจะแนะนำให้ใช้องค์ประกอบแทนการสืบทอด เพื่อนำโค้ดมาใช้ซ้ำระหว่าง Component ในส่วนนี้เราจะพิจารณาปัญหาสัก 2-3 ข้อที่นักพัฒนาซอฟต์แวร์ใหม่ ๆ ไปทำปฏิกิริยามักเข้าถึงเพื่อสร้างการสืบทอดและแสดงวิธีแก้ปัญหาเหล่านี้ด้วย Component

 

Containment

     Component บางตัวไม่รู้จักลูกๆ ก่อนเวลาอันควร นี่เป็นเรื่องธรรมดาสำหรับ Compinent เช่น Sidebar หรือ Dialog ซึ่งแสดงถึง "boxes" ทั่วไป เราขอแนะนำให้ใช้ Component นี้ ในการใช้ children พิเศษในการส่งผ่าน Elements ของ children ไปสู่ output โดยตรง :

function FancyBorder(props) {
  return (
    <div className={'FancyBorder FancyBorder-' + props.color}>
      {props.children}
    </div>
  );
}

     ซึ่งจะทำให้ Component อื่นๆส่งผ่านให้ children เข้าไปได้โดยพละการ :

function WelcomeDialog() {
  return (
    <FancyBorder color="blue">
      <h1 className="Dialog-title">
        Welcome
      </h1>
      <p className="Dialog-message">
        Thank you for visiting our spacecraft!
      </p>
    </FancyBorder>
  );
}

     ผลลัพธ์ที่ได้ :

Exam1

Exam1

     จากโค้ดด้สนบน อะไรก็ตามที่อยู่ภายในแท็ก <FancyBorder> จะได้รับการส่งผ่านไปยัง Component FancyBorder ในรูปแบบของ children เนื่องจาก FancyBorder แสดงผล {props.children} ภายใน <div> Element ที่ส่งผ่านจะปรากฏใน output สุดท้าย

     ถึงแม้ว่าจะเป็นเรื่องที่พบได้บ่อยครั้ง แต่บางครั้งเราอาจต้องสร้าง "Holes" หลายชุดใน Component  

     Example :

function SplitPane(props) {
  return (
    <div className="SplitPane">
      <div className="SplitPane-left">
        {props.left}
      </div>
      <div className="SplitPane-right">
        {props.right}
      </div>
    </div>
  );
}

function App() {
  return (
    <SplitPane
      left={
        <Contacts />
      }
      right={
        <Chat />
      } />
  );
}

     ผลลัพท์ที่ได้ :

Exam2

Exam2

     จากตัวอย่างข้างบนนี้ React Element เช่น <Contacts /> และ <Chat /> เป็นเพียง object  เท่านั้น ดังนั้นเราจะสามารถส่งผ่านข้อมูลเหล่านี้เป็น props ต่างๆเช่นข้อมูลอื่น ๆ

 

Specialization

     บางครั้งเราคิดว่า Component เป็น "special cases" ของ Component อื่น ๆ ตัวอย่างเช่นเราอาจกล่าวได้ว่า WelcomeDialog เป็นเคสพิเศษของ Dialog     ใน React นี้เราสามารถทำได้โดย Component ซึ่งส่วนประกอบ "specific" ที่เฉพาะเจาะจง จะแสดงผลเป็น "generic" ขึ้นมาและกำหนดค่าโดยใช้ props :

function Dialog(props) {
  return (
    <FancyBorder color="blue">
      <h1 className="Dialog-title">
        {props.title}
      </h1>
      <p className="Dialog-message">
        {props.message}
      </p>
    </FancyBorder>
  );
}

function WelcomeDialog() {
  return (
    <Dialog
      title="Welcome"
      message="Thank you for visiting our spacecraft!" />
  );
}

     ผลลัพธ์ที่ได้ :

exam3

exam3

     องค์ประกอบทำงานอย่างเท่าเทียมกันดี สำหรับ Component ที่กำหนดเป็น class :

function Dialog(props) {
  return (
    <FancyBorder color="blue">
      <h1 className="Dialog-title">
        {props.title}
      </h1>
      <p className="Dialog-message">
        {props.message}
      </p>
      {props.children}
    </FancyBorder>
  );
}

class SignUpDialog extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
    this.handleSignUp = this.handleSignUp.bind(this);
    this.state = {login: ''};
  }

  render() {
    return (
      <Dialog title="Mars Exploration Program"
              message="How should we refer to you?">
        <input value={this.state.login}
               onChange={this.handleChange} />
        <button onClick={this.handleSignUp}>
          Sign Me Up!
        </button>
      </Dialog>
    );
  }

  handleChange(e) {
    this.setState({login: e.target.value});
  }

  handleSignUp() {
    alert(`Welcome aboard, ${this.state.login}!`);
  }
}

        ผลลัพธ์ที่ได้ คือ เมื่อเรากรอกชื่อลงไป แล้วกด Signin จากนั้น Alert Dialog จะขึ้นมาแล้วแล้วทักทายเรา :

Exam4

Exam4

Exam5

Exam5

 

แล้วสิ่งที่สืบทอดคืออะไร

     Facebook ใช้ React ในหลายพัน Component และยังไม่พบกรณีการใช้งานใด ๆ ที่จะแนะนำให้สร้างลำดับชั้นของส่วนรับมรดก Component 

 

 

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
[Extension phpBB3.1.1] File Download Extension บล็อคในการดาวโหลด
โดย จันนุสรณ์ ดีแก่ พ 23 ม.ค. 2019 11:58 am บอร์ด phpBB 3.1 Extension Review
0
2
พ 23 ม.ค. 2019 11:58 am โดย จันนุสรณ์ ดีแก่
[Extension phpBB3.1.1] Previous / Next topic Extension หัวข้อก่อนหน้า / ถัดไป
โดย จันนุสรณ์ ดีแก่ พ 23 ม.ค. 2019 11:25 am บอร์ด phpBB 3.1 Extension Review
0
4
พ 23 ม.ค. 2019 11:25 am โดย จันนุสรณ์ ดีแก่
เมื่อหยุดยาวแล้วมาทำงาน
โดย จันนุสรณ์ ดีแก่ พ 23 ม.ค. 2019 10:38 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
4
พ 23 ม.ค. 2019 10:38 am โดย จันนุสรณ์ ดีแก่
อยากทราบวิธีการล้างค่าหลังทำการอัพโหลดเสร็จ ใน phpbb
โดย Ittichai_chupol ส 12 ม.ค. 2019 10:57 am บอร์ด Programming - PHP
1
38
อ 22 ม.ค. 2019 6:10 pm โดย Ittichai_chupol
การแบ่งประเภทของกิจการตามลักษณะการดำเนินงาน
โดย Chidchanok อ 22 ม.ค. 2019 3:05 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
8
อ 22 ม.ค. 2019 3:05 pm โดย Chidchanok
การจัดทำงบกระแสเงินสด
โดย Chidchanok อ 22 ม.ค. 2019 2:05 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
8
อ 22 ม.ค. 2019 2:05 pm โดย Chidchanok
PM 2.5
โดย จันนุสรณ์ ดีแก่ อ 22 ม.ค. 2019 1:35 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
10
อ 22 ม.ค. 2019 1:35 pm โดย จันนุสรณ์ ดีแก่
การตั้งค่าให้เว็บบอร์ด สามารถทำการเปลี่ยนชื่อผู้ใช้ได้ สำหรับแอดมินหรือผู้ดูแลระบบ
โดย จันนุสรณ์ ดีแก่ อ 22 ม.ค. 2019 1:18 pm บอร์ด phpBB user Guide Knowledge
0
9
อ 22 ม.ค. 2019 1:18 pm โดย จันนุสรณ์ ดีแก่
การทำตัว Check Box ใน Google Sheets
โดย Chidchanok อ 22 ม.ค. 2019 12:22 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
13
อ 22 ม.ค. 2019 12:22 pm โดย Chidchanok
[Extension phpBB3.1.1] Set forum width Extension เป็นการตั้งค่าความกว้างฟอรัม
โดย จันนุสรณ์ ดีแก่ อ 22 ม.ค. 2019 11:33 am บอร์ด phpBB 3.1 Extension Review
0
9
อ 22 ม.ค. 2019 11:33 am โดย จันนุสรณ์ ดีแก่
[Extension phpBB3.1.1] Activity Buttons - Quick Links Into Header Extension ปุ่มกิจกรรมต่างๆ
โดย จันนุสรณ์ ดีแก่ อ 22 ม.ค. 2019 10:49 am บอร์ด phpBB 3.1 Extension Review
0
9
อ 22 ม.ค. 2019 10:49 am โดย จันนุสรณ์ ดีแก่
R - Guide สำหรับ Migrate ข้อมูล
โดย tsukasaz จ 21 ม.ค. 2019 6:03 pm บอร์ด สิริกิตติรัตน์ - Developer
0
2
จ 21 ม.ค. 2019 6:03 pm โดย tsukasaz
ต้นเดือน Vs ปลายเดือน
โดย จันนุสรณ์ ดีแก่ จ 21 ม.ค. 2019 1:54 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
18
จ 21 ม.ค. 2019 1:54 pm โดย จันนุสรณ์ ดีแก่
ลายเซนต์คืออะไร การตั้งค่าข้อมูลส่วนตัว (แก้ไขลายเซนต์) วิธีการเพิ่มลายเซนต์
โดย จันนุสรณ์ ดีแก่ จ 21 ม.ค. 2019 11:42 am บอร์ด phpBB user Guide Knowledge
0
22
จ 21 ม.ค. 2019 11:42 am โดย จันนุสรณ์ ดีแก่
Bill of Material (BOM) คืออะไร
โดย ณัฐกฤตา บุญญะฤทธิ์ จ 21 ม.ค. 2019 11:38 am บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
28
จ 21 ม.ค. 2019 11:38 am โดย ณัฐกฤตา บุญญะฤทธิ์
[Extension phpBB3.1.1]Project Durango Extension เทมเพลสในรูปแบบสีเขียว
โดย จันนุสรณ์ ดีแก่ จ 21 ม.ค. 2019 11:02 am บอร์ด phpBB 3.1 Extension Review
0
14
จ 21 ม.ค. 2019 11:02 am โดย จันนุสรณ์ ดีแก่
[Extension phpBB3.1.1] Page Scrolling Extension ช่วยในการเลื่อนหน้า บนสุดและล่างสุด
โดย จันนุสรณ์ ดีแก่ จ 21 ม.ค. 2019 10:35 am บอร์ด phpBB 3.1 Extension Review
0
16
จ 21 ม.ค. 2019 10:35 am โดย จันนุสรณ์ ดีแก่
Q-ไม่สามารถ กด Save สินค้าได้
โดย Chidchanok จ 21 ม.ค. 2019 10:16 am บอร์ด M.D.Soft Co.,Ltd. - Tester
5
20
จ 21 ม.ค. 2019 11:07 am โดย Chidchanok
แก้ปัญหา ติดตั้ง โปรแกรมด้วย dpkg -i , apt-get deb
โดย mindphp จ 21 ม.ค. 2019 3:37 am บอร์ด Linux - Web Server
0
14
จ 21 ม.ค. 2019 3:37 am โดย mindphp
Manual (คู่มือ) คืออะไร Work Manual เเละ User Manual ต่างกันอย่างไร
โดย thatsawan จ 21 ม.ค. 2019 1:20 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
25
จ 21 ม.ค. 2019 1:20 am โดย thatsawan