วิธีใช้ Props children ใน react

22 Feb 2018

Share to:

สวัสดีครับ บทความนี้จะเป็นการเรียนรู้และ ทําความเข้าใจในส่วนของเรื่อง Props children ใน React รวมไปถึงวิธีการใช้งานในแบบต่างๆ

Props children คืออะไร

Props Children คือ เป็น Props พิเศษที่ถูกสร้างขึ้นโดยอัตโนมัติ เมื่อ Component ใดๆมี  Element ลูก ดังตัวอย่างนี้

Image

ในตัวอย่างจะเห็นว่าใน MovieBrowser Component มี Element อื่นๆ อยู่ภายใน(Movie Component) ซึ่งเราสามารถเข้าถึง Element เหล่านี้ได้จาก Props พิเศษที่ชื่อว่า Children ใน MovieBrowser Component เรามาลองสร้าง Component ที่มี Element ลูก ตามตัวอย่างนี้ โดยผมตั้งโจทย์ว่า จะสร้าง Component ที่รับ Element ลูกมา แล้วนํามาแสดงผล ใน Component ของตัวเอง จะได้แบบนี้

import React, { Component } from 'react';

export default class MovieBrowser extends React.Component {
    render() {
      return<div>
          {this.props.children}
        </div>
    }
}

จาก Code ด้านบนเราสามารถเข้าถึง Element ลูกได้จาก **this.props.children **ซึ่งตัวแปรนี้จะถูกสร้างขึ้นอัตโนมัติ เมื่อมี Element ลูก โดยจะเก็บ Object ของ Element ลูกไว้ทั้งหมด Elememt ลูก มี Elememt เดียว  หรือหลาย Elememt  ก็ได้ครับ เมื่อนํา Component มาเรียกใช้ จะเรียกใช้ตามภาพด้านล่าง

Image

เมื่อรันโปรแกรม จะได้คําว่า “My movie” แสดงบนหน้าจอ

Multiple children

ในกรณีที่ภายใน Component มีหลาย Element แบบนี้

<MovieBrowser>
    <div>My Movie 1</div>
    <div>My Movie 2</div>
</MovieBrowser>

เราสามารถเข้าถึง Element เหล่านั้นได้ตามตัวอย่างด้านล่าง

import React, { Component } from 'react';

export default class MovieBrowser extends React.Component {
    render() {
      return<div>
          {this.props.children[0]}
        </div>
    }
}

จาก Code เราสามารถเข้าถึง element ลูก แต่ละตัวได้แบบ Array

การเข้าถึง Props ใน Element ลูก

ถ้าเราต้องการจะเข้าถึง props ของ Element ลูก แบบนี้

Image

สามารถเข้าถึงตรงๆแบบนี้ได้เลยครับ

Image

เราได้เรียนรู้การใช้งานพื้นฐานกันไปแล้ว ลําดับต่อไปจะมาเรียนรู้การใช้งาน React.Children เพื่อจักการกับ Element ลูก

React.Children.map() และ React.cloneElement()

React.Children.map() เป็น Function สําหรับ loop ตามจํานวนของ Element ลูก ส่วน React.cloneElement() เป็น Function สําหรับ Clone Element ซึ่งเราสามารถเพิ่มเติม Props ให้กับ Element ที่เรา Clone มาได้ มาดูตัวอย่างการใช้งานของทั้งสอง function นี้ โดยผมตั้งโจทย์ว่า สร้าง component เพื่อ เปลี่ยน style ให้กับ Element ลูก ตาม code ด้านล่าง

import React, { Component } from 'react';

export default class MovieBrowser extends React.Component {
    render() {
      return<div>
          {
            React.Children.map(this.props.children, child => (
                React.cloneElement(child, {
                    style: {
                        backgroundColor: 'salmon',
                        color: 'seagreen',
                    }
                })
            ))
          }
        </div>
    }
}

นํา Component ไปใช้

<MovieBrowser>
    <div>Mad Max: Fury Road</div>
    <div>Harry Potter & The Goblet Of Fire</div>
</MovieBrowser>

จะได้ผลแบบนี้

Image

React.Children.forEach()

มีการทํางานคล้ายๆกับ React.Children.map() แต่จะไม่ Return value ออกมา คือ loop ตามจํานวนของ Element อย่างเดียว

React.Children.count()

React.Children.count() จะ Return จํานวน ของ Element ลูกทั้งหมดออกมา

React.Children.only()

React.Children.only() มีไว้ทําหรับตรวจสอบว่า มี Element ลูกเดียว Element เดียวหรือไม่

React.Children.toArray()

React.Children.toArray() เป็น function แปลงเป็น array โดยจะเพิ่ม kay มาด้วย จะทําให้เราจัดการ เรียงลําดับ หรือการแสดงผลได้ง่ายขึ้น

Suggestion blogs

ซ่อน Startup console ของ raspberry pi

ปกติเวลาเปิดเครื่องขึ้นมาจะมีหน้าจอ console ของระบบขึ้นมาพร้อมกับ logo ของ raspberry pi

IDN กับการจดโดเมนภาษาไทย

IDN หรือเรียกเต็มๆว่า Internationalized Domain Name คือ ชื่อโดเมนที่สามารถประกอบด้วยอักขระ (character) อื่น ๆ ที่นอกเหนือไปจากรหัส ASCII ได้ ซึ่งเดิมทีการตั้งชื่อโดเมนจะถูกจำกัดอยู่เพียงแค่การใช้ตัวอักษรภาษาอังกฤษ (อักษรโรมัน) A-Z, ตัวเลขอารบิก 0-9 และเครื่องหมายยัติภังค์ (-) เท่านั้น เนื่องจากข้อจำกัดของระบบชื่อโดเมน (domain name system - DNS) ที่ใช้อยู่แต่เดิม

Deep web และ Dark web ด้านมืดของ Internet

ปัจจุบันมีเว็บไซต์ที่เปิดเผยสู่สาธารณะหรือเรียกกันว่า Surface Web เพียง 4% ซึ่งสามารถค้นหาผ่าน Search engine ทั่วไปได้เช่น google ฯลฯ แต่ที่เหลือ 96% เป็นเว็บไซต์ที่ซ่อนตัวอยู่ ไม่สามารถเข้าถึงได้ด้วยวิธีปกติ หรือเรียกกันว่า Deep web และ Dark web ความแตกต่างระหว่าง Surface Web, Deep web และ Dark web คือ


Copyright © 2019 - 2025 thiti.dev |  v1.45.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ