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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ข้อมูลที่ทำการ loop ไม่เข้าไปเก็บใน array ครับ
โดย bankjittapol จ 18 พ.ย. 2019 8:16 pm บอร์ด Joomla Development
1
10
จ 18 พ.ย. 2019 8:30 pm โดย mindphp
ใช้คำสั่ง วันที่ยังไง โดยไม่ต้องกำหนด timezone
โดย bankjittapol จ 18 พ.ย. 2019 8:11 pm บอร์ด Joomla Development
0
7
จ 18 พ.ย. 2019 8:11 pm โดย bankjittapol
จะกำหนดเงื่อนไขภาษายังไง โดยไม่ไปกำหนดค่าภาษาตรงๆ
โดย bankjittapol จ 18 พ.ย. 2019 8:01 pm บอร์ด Joomla Development
1
10
จ 18 พ.ย. 2019 8:08 pm โดย tsukasaz
ศึกษาการใช้งาน Joomla
โดย numtan5839 จ 18 พ.ย. 2019 7:16 pm บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
0
3
จ 18 พ.ย. 2019 7:16 pm โดย numtan5839
ผลพยากรณ์อากาศ เปลี่ยนภาษาตามการตั้งค่าของผู้ดูแลระบบ
โดย bankjittapol จ 18 พ.ย. 2019 7:11 pm บอร์ด Joomla Developing Knowledge
0
11
จ 18 พ.ย. 2019 7:11 pm โดย bankjittapol
สร้าง list box ใน joomla ที่สามารถเลือก มากกว่า 1 ค่า
โดย bankjittapol จ 18 พ.ย. 2019 6:14 pm บอร์ด Joomla Developing Knowledge
0
9
จ 18 พ.ย. 2019 6:14 pm โดย bankjittapol
จะดึงชื่อจังหวัดมาแสดงใน list ได้ยังไงครับ
โดย bankjittapol จ 18 พ.ย. 2019 5:45 pm บอร์ด Joomla Development
1
15
จ 18 พ.ย. 2019 5:52 pm โดย tsukasaz
ต้องการให้ ใน list แสดงชื่อจังหวัด เพื่อใช้เลือกแสดงครับ
โดย bankjittapol จ 18 พ.ย. 2019 12:03 pm บอร์ด Joomla Development
2
30
จ 18 พ.ย. 2019 4:02 pm โดย bankjittapol
Work's on Hand ตรีเนตร บูรณโพธิ์ทอง M097
โดย numtan5839 จ 04 พ.ย. 2019 11:09 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
2
25
จ 18 พ.ย. 2019 3:27 pm โดย numtan5839
ดู Logs ไฟล์ บน Windows Server แบบ Real Time ตัวอย่าง Apache Logs
โดย mindphp จ 18 พ.ย. 2019 1:45 pm บอร์ด Microsoft Office Knowledge & line & Etc
1
12
จ 18 พ.ย. 2019 1:47 pm โดย mindphp
หา theme language file ไม่เจอ
โดย bankjittapol ส 16 พ.ย. 2019 5:33 pm บอร์ด Joomla Development
2
39
ส 16 พ.ย. 2019 5:50 pm โดย bankjittapol
ต้องการสร้าง แท็ก เพื่อเลือกจังหวัด ที่จะแสดง ต้องทำไงครับ
โดย bankjittapol จ 18 พ.ย. 2019 10:53 am บอร์ด Joomla Development
2
18
จ 18 พ.ย. 2019 11:47 am โดย bankjittapol
เริ่มลงทุนในอสังหาฯ คุณเองก็ทำได้
โดย Patty Perfume อ 17 พ.ย. 2019 6:08 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
26
จ 18 พ.ย. 2019 10:29 am โดย Losa
บันทึกตัวแปรเป็นชื่อไฟล์ลง database ไม่ได้
โดย teenproza7 อ 28 พฤษภาคม 2019 4:52 pm บอร์ด Programming - C/C++ & java & Python
0
221
อ 28 พฤษภาคม 2019 4:52 pm โดย teenproza7
งานประจำวันที่ 18 พฤศจิกายน 2562
โดย numtan5839 จ 18 พ.ย. 2019 10:14 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
1
12
จ 18 พ.ย. 2019 7:16 pm โดย numtan5839
Skype for Business และ Microsoft Teams
โดย Atomseed Suckseed จ 18 พ.ย. 2019 10:11 am บอร์ด MindPHP News / Feedback
0
6
จ 18 พ.ย. 2019 10:11 am โดย Atomseed Suckseed
งานประจำวันที่ 16 พฤศจิกายน 2562
โดย numtan5839 ส 16 พ.ย. 2019 10:28 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
4
23
ส 16 พ.ย. 2019 7:02 pm โดย numtan5839
การใช้งาน Ultrasonic Sensor เซ็นเซอร์ที่ใช้สำหรับตรวจจับระยะห่างของวัดถุ
โดย bankjittapol ส 16 พ.ย. 2019 4:42 pm บอร์ด IOT - Internet of things
0
16
ส 16 พ.ย. 2019 4:42 pm โดย bankjittapol
อยากทราบการแสดงวันที่ในรูปแบบของ joomla
โดย bankjittapol ส 16 พ.ย. 2019 11:14 am บอร์ด Joomla Development
5
48
ส 16 พ.ย. 2019 4:56 pm โดย mindphp
Ultrasonic Sensor คืออะไร
โดย bankjittapol ส 16 พ.ย. 2019 3:40 pm บอร์ด IOT - Internet of things
0
25
ส 16 พ.ย. 2019 3:40 pm โดย bankjittapol