<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 21aki</title>
    <description>The latest articles on DEV Community by 21aki (@21aki).</description>
    <link>https://dev.to/21aki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1303802%2F0d0e01be-289f-4557-a813-4af19d0280df.jpg</url>
      <title>DEV Community: 21aki</title>
      <link>https://dev.to/21aki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/21aki"/>
    <language>en</language>
    <item>
      <title>การสร้าง UI ด้วย React (IV) - ใช้ปีกกาใน JSX</title>
      <dc:creator>21aki</dc:creator>
      <pubDate>Wed, 28 Feb 2024 01:57:59 +0000</pubDate>
      <link>https://dev.to/21aki/kaarsraang-ui-dwy-react-iv-aichpiikkaaain-jsx-3793</link>
      <guid>https://dev.to/21aki/kaarsraang-ui-dwy-react-iv-aichpiikkaaain-jsx-3793</guid>
      <description>&lt;p&gt;JSX ช่วยให้เราเขียนภาษาที่เหมือน HTML ในไฟล์ JavaScript โดยรวมการทำงานและเนื้อหาเอกสารไว้ด้วยกัน หากเราต้องการใส่ค่าที่มีการเปลี่ยนแปลงได้ในเนื้อหา เราสามารถใช่ ปีกกา เพื่อใช้แสดงข้อมูลได้ใน JSX ได้&lt;/p&gt;




&lt;p&gt;ในซีรีย์นี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no"&gt;การสร้าง React Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-ii-import-aela-export-component-pge"&gt;Import และ Export Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-iii-kaarekhiiyn-jsx-484h"&gt;เขียน JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ใช้ ปีกกา ใน JSX&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ส่งค่าผ่าน Props&lt;/li&gt;
&lt;li&gt;การแสดง Component แบบมีเงื่อนไข (Conditional Rendering)&lt;/li&gt;
&lt;li&gt;การแสดงข้อมูลเป็น List&lt;/li&gt;
&lt;li&gt;แยก Component (สร้าง Pure Component)&lt;/li&gt;
&lt;li&gt;มอง UI ให้เป็นแผนภูมิต้นไม้ (Tree Structure)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ใช้ตัวแปรแทน string
&lt;/h3&gt;

&lt;p&gt;เมื่อเราต้องการใส่ค่าที่เป็น string ใน attribute ของ JSX เราสามารถใช้ได้ทั้ง single (&lt;code&gt;'&lt;/code&gt;) หรือ double quote (&lt;code&gt;"&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Avatar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"avatar"&lt;/span&gt;
      &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/7vQD0fPs.jpg"&lt;/span&gt;
      &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Gregorio Y. Zara"&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จะเห็นว่า "https://i.imgur.com/7vQD0fPs.jpg" และ "Gregorio Y. Zara" เป็นค่า string ที่ถูกใส่ใน attribute&lt;/p&gt;

&lt;p&gt;หากเราต้องการให้ค่าสามารถเปลี่ยนแปลงได้ เราสามารถกำหนดให้มันเป็นตัวแปร และ&lt;strong&gt;เปลี่ยน &lt;code&gt;"&lt;/code&gt; และ &lt;code&gt;"&lt;/code&gt; เป็น &lt;code&gt;{&lt;/code&gt; และ &lt;code&gt;}&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Avatar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://i.imgur.com/7vQD0fPs.jpg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gregorio Y. Zara&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"avatar"&lt;/span&gt;
      &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ปีกกา: เปิดใช้งาน JavaScript
&lt;/h3&gt;

&lt;p&gt;ใน JSX เราสามารถเรียกใช้งาน JavaScript ได้ โดยการใส่คำสั่ง JavaScript ในปีกกา &lt;code&gt;{ }&lt;/code&gt;. เช่น หากเราต้องการใช้ตัวแปร &lt;code&gt;name&lt;/code&gt; ใน &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; สามารถทำได้ตามตัวอย่างดังนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TodoList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gregorio Y. Zara&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;'s To Do List&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ทั้งนี้สามารถใส่คำสั่ง JavaScript แบบอื่นๆ เช่นตัวอย่างคือฟังค์ชั่น &lt;code&gt;formatDate()&lt;/code&gt; ก็ได้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Intl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en-US&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;weekday&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;long&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TodoList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;To Do List for &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;today&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ปีกกาตอนไหน
&lt;/h3&gt;

&lt;p&gt;เราสามารถใช้ปีกกาใน JSX ได้ 2 วิธีได้แก่:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ใช้เป็นข้อความ โดยใส่เข้าไปในแท็กของ JSX โดยตรง: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;&amp;lt;h1&amp;gt;{name}'s To Do List&amp;lt;/h1&amp;gt;&lt;/code&gt; ใช้งานได้&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;&amp;lt;{tag}&amp;gt;Gregorio Y. Zara's To Do List&amp;lt;/{tag}&amp;gt;&lt;/code&gt; ไม่ทำงาน&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ใช้เป็น Attribute หลังเครื่องหมาย &lt;code&gt;=&lt;/code&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;src={avatar}&lt;/code&gt; จะเป็น&lt;u&gt;การแทนค่า&lt;/u&gt;ตัวแปร &lt;code&gt;avatar&lt;/code&gt; ใน src&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;src="{avatar}"&lt;/code&gt; จะเป็นการใช้ string &lt;code&gt;"{avatar}"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ใช้ปีกกาสองชั้น: สำหรับ CSS และ Object ใน JSX
&lt;/h3&gt;

&lt;p&gt;หากเราต้องการส่ง Object เช่น &lt;code&gt;{ name: "Hedy Lamarr", inventions: 5 }&lt;/code&gt; เป็นค่าใน Attribute ของ JSX สามารถส่งเป็นค่าได้ดังนี้ &lt;code&gt;person={{ name: "Hedy Lamarr", inventions: 5 }}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;กรณีเดียวกับการใส่ CSS ใน JSX สามารถใส่ Object ของ CSS ใน attribute &lt;code&gt;style&lt;/code&gt; ได้:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/6twv9v"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ ผิดกันง่ายๆ&lt;br&gt;
property  ของ css จะต้องเป็น camelCase. เช่นหาก HTML &lt;code&gt;&amp;lt;ul style="background-color: black"&amp;gt;&lt;/code&gt; จะต้องเขียนเป็น &lt;code&gt;&amp;lt;ul style={{ backgroundColor: 'black' }}&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  วิธีใช้ Object ในปีกกาแบบอื่นๆ
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-dev-vppdcf"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;จากตัวอย่าง สังเกตุว่า Object &lt;code&gt;person&lt;/code&gt; มี string &lt;code&gt;name&lt;/code&gt; และ object &lt;code&gt;theme&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gregorio Y. Zara&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pink&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ซึ่งเราสามารถนำค่าของ &lt;code&gt;person&lt;/code&gt; ไปใช้ใน Component เช่นดังตัวอย่าง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;'s Todos&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  สรุป
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;หากเราใช้ &lt;code&gt;"&lt;/code&gt; ครอบข้อความใน attribute ของ JSX จะเป็นการส่งค่า string.&lt;/li&gt;
&lt;li&gt;แต่ถ้าเราใช้ ปีกกา จะเป็นการแทนค่าของ JavaScript เพื่อกำหนดเงื่อนไข หรือ แสดงค่านั้นๆ แทนได้.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{{&lt;/code&gt; และ &lt;code&gt;}}&lt;/code&gt; ไม่ใช่คำสั่งพิเศษ: แต่เป็นการซ้อน Object ของ JavaScript เพื่อส่งค่าไปยังปีกกาของ JSX.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>การสร้าง UI ด้วย React (III) - การเขียน JSX</title>
      <dc:creator>21aki</dc:creator>
      <pubDate>Tue, 27 Feb 2024 08:48:06 +0000</pubDate>
      <link>https://dev.to/21aki/kaarsraang-ui-dwy-react-iii-kaarekhiiyn-jsx-484h</link>
      <guid>https://dev.to/21aki/kaarsraang-ui-dwy-react-iii-kaarekhiiyn-jsx-484h</guid>
      <description>&lt;p&gt;&lt;em&gt;JSX&lt;/em&gt; เป็นส่วนขยายของ &lt;strong&gt;JavaScript&lt;/strong&gt; ที่ ทำให้เราเขียนภาษา Markup แบบเดียวกับ HTML ในไฟล์ JavaScript ได้&lt;/p&gt;




&lt;p&gt;ในซีรีย์นี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no"&gt;การสร้าง React Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-ii-import-aela-export-component-pge"&gt;Import และ Export Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เขียน JSX&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-iv-aichpiikkaaain-jsx-3793"&gt;ใช้ ปีกกา ใน JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ส่งค่าผ่าน Props&lt;/li&gt;
&lt;li&gt;การแสดง Component แบบมีเงื่อนไข (Conditional Rendering)&lt;/li&gt;
&lt;li&gt;การแสดงข้อมูลเป็น List&lt;/li&gt;
&lt;li&gt;แยก Component (สร้าง Pure Component)&lt;/li&gt;
&lt;li&gt;มอง UI ให้เป็นแผนภูมิต้นไม้ (Tree Structure)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  JSX: HTML เวอร์ชั่น JavaScript
&lt;/h3&gt;

&lt;p&gt;ปกติหากเราพัฒนาเว็บ เราจะเขียน HTML, CSS และ JavaScript แยกไฟล์เป็นส่วนๆ:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99qooc47x33p7vj01quv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99qooc47x33p7vj01quv.png" alt="HTML JavaScript" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แต่ใน React เราสามารถรวมทั้งหมด เพื่อ Render พร้อมๆ กันได้ใน Components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd711izg74yjb7x2aiaed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd711izg74yjb7x2aiaed.png" alt="JSX" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เมื่อเป็นแบบนี้ เราสามารถแยกส่วนแต่ละ UI ให้โค้ดแยกกันได้ เช่น โค้ดทั้งหมดของปุ่ม จะถูกแยกจาก โค้ดทั้งหมดของ sidebar อย่างชัดเจน&lt;/p&gt;

&lt;p&gt;ในแต่ละ React Component จะเป็นฟังค์ชั่น JavaScript ที่รวม JSX ซึ่งเป็น HTML เวอร์ชั่น JavaScript วิธีที่จะเข้าใจ JSX ง่ายที่สุดคือลองแปลง HTML ไปเป็น JSX&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📝 ข้อสังเกตุ&lt;/strong&gt;&lt;br&gt;
JSX กับ React เป็นคนละอย่างกัน แต่มักถูกใช้ร่วมกัน, เราสามารถเลือกใช้อย่างใดอย่างหนึ่งได้. JSX เป็นส่วนขยายสำหรับการเขียนโปรแกรม, ส่วน React เป็น library ในภาษษ JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  แปลง HTML ไปเป็น JSX
&lt;/h3&gt;

&lt;p&gt;จากตัวอย่าง ภาษา HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hedy Lamarr's Todos&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; 
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/yXOvdOSs.jpg"&lt;/span&gt; 
  &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Hedy Lamarr"&lt;/span&gt; 
  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"photo"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Invent new traffic lights
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Rehearse a movie scene
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Improve the spectrum technology
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราต้องการนำมาใส่ใน Component นี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TodoList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// ???&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หากเราก้อป แปะ ไปตรงๆ โค้ดจะใช้ไม่ได้&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/9m6zmf"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;เพราะ JSX มีกฎเพิ่มเติมจาก HTML หากเราอ่านข้อความ error ด้านบน ก็จะบอกใบ้เราแล้วว่าจะต้องแก้ยังไง&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📝 ข้อสังเกตุ&lt;/strong&gt;&lt;br&gt;
เมื่อเรารัน React แล้วเกิดข้อความ error บนหน้าจอ จะช่วยเราหาว่าปัญหาอยู่ตรงไหน หากติดก็ให้อ่านข้อความ error ดูดีๆ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  กฎของ JSX
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. ต้อง return ออกมาเป็น Element เดียว
&lt;/h4&gt;

&lt;p&gt;หากเราต้องการแสดง Element หลายๆ Element พร้อมๆ กัน ให้เราคลุมด้วย Tag สัก Tag เพื่อให้มันออกมาชั้นนอกสุดเพียง Element เดียว เช่นตัวอย่างนี้ใช้ &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; ครอบ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hedy Lamarr's Todos&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; 
    &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/yXOvdOSs.jpg"&lt;/span&gt; 
    &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hedy Lamarr"&lt;/span&gt; 
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"photo"&lt;/span&gt;
  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หรือเราสามารถครอบด้วย &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; และ &lt;code&gt;&amp;lt;/&amp;gt;&lt;/code&gt; แทน &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; ก็ได้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hedy Lamarr's Todos&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; 
    &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/yXOvdOSs.jpg"&lt;/span&gt; 
    &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hedy Lamarr"&lt;/span&gt; 
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"photo"&lt;/span&gt;
  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tag ที่ว่างๆ นี้ (&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; และ &lt;code&gt;&amp;lt;/&amp;gt;&lt;/code&gt;) เราจะเรียกว่า &lt;em&gt;&lt;strong&gt;Fragments&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. ปิดทุก Tags
&lt;/h4&gt;

&lt;p&gt;ใน JSX จะต้องมีการปิด Tag ทั้งหมด, หากเป็น Tag เดี่ยวๆ เช่น &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; ต้องเปลี่ยนเป็น &lt;code&gt;&amp;lt;img /&amp;gt;&lt;/code&gt; และ Tag ที่มีการเปิดและปิดอย่าง &lt;code&gt;&amp;lt;li&amp;gt;oranges&lt;/code&gt; จะต้องเขียนปิด Tag เป็น &lt;code&gt;&amp;lt;li&amp;gt;oranges&amp;lt;/li&amp;gt;&lt;/code&gt; เสมอ ดังตัวอย่าง:.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; 
    &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/yXOvdOSs.jpg"&lt;/span&gt; 
    &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hedy Lamarr"&lt;/span&gt; 
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"photo"&lt;/span&gt;
   &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Invent new traffic lights&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Rehearse a movie scene&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Improve the spectrum technology&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. ใช้ camelCase กับ&lt;del&gt;ทั้งหมด&lt;/del&gt;เกือบทุกอย่าง
&lt;/h4&gt;

&lt;p&gt;JSX จะถูกแปลงเป็น JavaScript และ attribute ของ Tag HTML จะถูกแปลงเป็น Key ของ object ใน JavaScript และใช้ attribute เหล่านั้นเป็นตัวแปร แต่ด้วยข้อจำกัดในการตั้งชื่อตัวแปรของ JavaScript เราจะไม่สามารถตั้งชื่อที่มีขีด หรือใช้คำสงวนอย่าง &lt;code&gt;class&lt;/code&gt; ได้&lt;/p&gt;

&lt;p&gt;ด้วยเหตุนี้ ทำให้ใน React, attribute ของ HTML และ SVG จะถูกเขียนเป็น camelCase  เช่น &lt;code&gt;stroke-width&lt;/code&gt; จะต้องเขียนเป็น &lt;code&gt;strokeWidth&lt;/code&gt; และเนื่องจาก &lt;code&gt;class&lt;/code&gt; เป็นคำสงวน ใน React จะถูกเปลี่ยนเป็น &lt;code&gt;className&lt;/code&gt; แทน&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/className"&gt;ตามชื่อใน DOM&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; 
  &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/yXOvdOSs.jpg"&lt;/span&gt; 
  &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hedy Lamarr"&lt;/span&gt; 
  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"photo"&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pro-tip: ใช้ตัวแปลง JSX
&lt;/h3&gt;

&lt;p&gt;เราสามารถเอา HTML หรือ JSX ไปแปลงผ่าน&lt;a href="https://transform.tools/html-to-jsx"&gt;ตัวแปลง&lt;/a&gt;ได้ &lt;/p&gt;

&lt;p&gt;เมื่อแปลง HTML เป็น JSX แล้ว จะได้ผลลัพท์ดังนี้ :&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/j9tr6f"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  สรุป
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Components ใน React จะถูก render พร้อมกับเงื่อนไขต่างๆ กับ JSX.&lt;/li&gt;
&lt;li&gt;JSX คล้ายคลึงกับ HTML, โดยมีข้อแตกต่างเล็กน้อย. โดยแปลงได้โดยใช้&lt;a href="https://transform.tools/html-to-jsx"&gt;ตัวแปลง&lt;/a&gt;ได้ .&lt;/li&gt;
&lt;li&gt;หากพบปัญหา ให้ดูข้อความ Error จะช่วยแนะนำแนวทางแก้ไข JSX ให้ถูกต้องได้.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>การสร้าง UI ด้วย React (II) - Import และ Export Component</title>
      <dc:creator>21aki</dc:creator>
      <pubDate>Tue, 27 Feb 2024 06:04:23 +0000</pubDate>
      <link>https://dev.to/21aki/kaarsraang-ui-dwy-react-ii-import-aela-export-component-pge</link>
      <guid>https://dev.to/21aki/kaarsraang-ui-dwy-react-ii-import-aela-export-component-pge</guid>
      <description>&lt;p&gt;Components ถูกสร้างมาเพื่อใช้ซ้ำ แต่เมื่อสร้างไปแล้ว โค้ดอาจจะยาวไปและจัดการยาก การแบ่งเป็นหลายๆ ไฟล์จะทำให้ง่ายต่อการจัดการและใช้ซ้ำได้ง่าย.&lt;/p&gt;




&lt;p&gt;ในซีรีย์นี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no"&gt;การสร้าง React Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import และ Export Component&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-iii-kaarekhiiyn-jsx-484h"&gt;เขียน JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ใช้ ปีกกา ใน JSX&lt;/li&gt;
&lt;li&gt;ส่งค่าผ่าน Props&lt;/li&gt;
&lt;li&gt;การแสดง Component แบบมีเงื่อนไข (Conditional Rendering)&lt;/li&gt;
&lt;li&gt;การแสดงข้อมูลเป็น List&lt;/li&gt;
&lt;li&gt;แยก Component (สร้าง Pure Component)&lt;/li&gt;
&lt;li&gt;มอง UI ให้เป็นแผนภูมิต้นไม้ (Tree Structure)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ไฟล์ Component หลัก
&lt;/h3&gt;

&lt;p&gt;จาก &lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no"&gt;การสร้าง React Component&lt;/a&gt; เราจะได้โค้ดแบบนี้&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/xgy8t9"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;แต่โค้ดทั้งหมดจะอยู่ใน &lt;code&gt;App.js&lt;/code&gt; ซึ่งเป็นไฟล์ Component หลักของโปรแกรม โดยชื่อไฟล์จะขึ้นอยู่กับวิธีการตั้งค่า และ Framework ที่ใช้&lt;/p&gt;

&lt;h3&gt;
  
  
  Exporting และ importing ตัว component
&lt;/h3&gt;

&lt;p&gt;เพื่อให้ง่ายต่อการจัดการ เราสามารถแบ่ง ขั้นตอนการแยก Component &lt;code&gt;Gallery&lt;/code&gt; และ &lt;code&gt;Profile&lt;/code&gt; ออกจาก ไฟล์ Component หลักได้ ดังนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;สร้าง&lt;/strong&gt;ไฟล์ JS ใหม่ เพื่อใส่ Components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; ฟังค์ชั่นจากไฟล์ (สามารถใช้ได้ทั้ง export &lt;code&gt;default&lt;/code&gt; หรือ ตาม &lt;code&gt;ชื่อฟังค์ชั่น&lt;/code&gt; ก็ได้)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import&lt;/strong&gt; ในไฟล์ที่ต้องการใช้ Component (ตามฟังค์ชั่นที่ทำไว้)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง การ &lt;code&gt;Gallery&lt;/code&gt; และ &lt;code&gt;Profile&lt;/code&gt; ออกจาก &lt;code&gt;App.js&lt;/code&gt; ไปยังไฟล์ใหม่ &lt;code&gt;Gallery.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-dev-nfmfwy"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;จากตัวอย่างสามารถแจกแจงเป็น 2 ไฟล์ Component:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Gallery.js&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การประกาศ &lt;code&gt;Profile&lt;/code&gt; Component ที่ใช้เฉพาะในไฟล์เดียวกัน จึงไม่จำเป็นต้อง export&lt;/li&gt;
&lt;li&gt;Export &lt;code&gt;Gallery&lt;/code&gt; Component เป็น &lt;code&gt;default&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;App.js&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import &lt;code&gt;Gallery&lt;/code&gt; ที่เป็น &lt;code&gt;default&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Export &lt;code&gt;App&lt;/code&gt; ที่เป็น Component หลักของโปรแกรม ให้เป็น &lt;code&gt;default&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📝 ข้อสังเกตุ&lt;/strong&gt;&lt;br&gt;
สังเกตุว่าเราสามารถละ &lt;code&gt;.js&lt;/code&gt; ออกจากชื่อไฟล์ได้:&lt;/p&gt;


&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Gallery&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Gallery&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;ใน React สามาถใช้งานได้ทั้ง './Gallery.js' หรือ './Gallery'.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  การ Export และ Import หลายๆ Component จาก ไฟล์เดียวกัน
&lt;/h3&gt;

&lt;p&gt;หากเราต้องการใช้ เฉพาะ &lt;code&gt;Profile&lt;/code&gt; แทน &lt;code&gt;Gallery&lt;/code&gt; เราสามารถทำได้ 2 แบบ คือ สร้างไฟล์ใหม่แล้ว export แบบ &lt;code&gt;default&lt;/code&gt; ให้ &lt;code&gt;Profile&lt;/code&gt; หรือ เราสามารถใส่ &lt;code&gt;export&lt;/code&gt; หน้าชื่อฟังค์ชั่น (Name) เพื่อมาใช้ต่อได้เลย &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;แต่ &lt;code&gt;default export&lt;/code&gt; สามารถใช้ได้ 1 ครั้งต่อ 1 ไฟล์ เท่านั้น&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📝 ข้อสังเกตุ&lt;/strong&gt;&lt;br&gt;
เพื่อลดความสับสันที่อาจจะเกิดขึ้น บางทีมพัฒนาเลือกที่จะใช้การ export default หรือ export ชื่อฟังค์ชั่น แบบใดแบบ เพียงหนึ่งแบบเดียว&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนการ export แบบชื่อฟังค์ชั่น (Name):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;เริ่มจาก &lt;strong&gt;export&lt;/strong&gt; &lt;code&gt;Profile&lt;/code&gt; จาก &lt;code&gt;Gallery.js&lt;/code&gt; โดยการใส่ export หน้าชื่อฟังค์ชั่น (ไม่ใช้ &lt;code&gt;default&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้น, &lt;strong&gt;import&lt;/strong&gt; &lt;code&gt;Profile&lt;/code&gt; จาก &lt;code&gt;Gallery.js&lt;/code&gt; ใน &lt;code&gt;App.js&lt;/code&gt; โดย import ด้วยชื่อฟังค์ชั่น (ใช้ ปีกกาครอบ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Gallery.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สุดท้าย, สั่ง render &lt;code&gt;&amp;lt;Profile /&amp;gt;&lt;/code&gt; ใน App:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โดยจะออกมาหน้าตาแบบนี้: &lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-dev-5qcqj6"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;ตอนนี้ เราจะเข้าใจการใช้ exports แบบ default และ ชื่อฟังค์ชั่น (name) ทั้งสองแบบแล้ว:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Gallery.js&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Profile&lt;/code&gt; เป็นการ &lt;strong&gt;Exports&lt;/strong&gt; Component &lt;strong&gt;แบบ ชื่อฟังค์ชั่น (name)&lt;/strong&gt; &lt;code&gt;Profile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Gallery&lt;/code&gt; เป็นการ &lt;strong&gt;Exports&lt;/strong&gt; Component &lt;strong&gt;แบบ default&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;App.js&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Profile&lt;/code&gt; เป็นการ &lt;strong&gt;Imports&lt;/strong&gt; Component &lt;strong&gt;แบบ ชื่อฟังค์ชั่น&lt;/strong&gt; &lt;code&gt;Profile&lt;/code&gt; จาก &lt;code&gt;Gallery.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Gallery&lt;/code&gt; เป็นการ &lt;strong&gt;Imports&lt;/strong&gt; Component &lt;strong&gt;แบบ default&lt;/strong&gt; จาก &lt;code&gt;Gallery.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;App&lt;/code&gt; เป็นการ &lt;strong&gt;Exports&lt;/strong&gt; Component หลักของโปรแกรม &lt;strong&gt;แบบ default&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  สรุป
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ไฟล์ component หลักของโปรแกรมคืออะไร&lt;/li&gt;
&lt;li&gt;import และ export ตัว componentได้ยังไง&lt;/li&gt;
&lt;li&gt;เราควรใช้ default และ imports และ exports แบบไหน เมื่อไหร่&lt;/li&gt;
&lt;li&gt;วิธี export components หลายตัวพร้อมกันจากไฟล์เดียวกัน&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>การสร้าง UI ด้วย React (I) - การสร้าง React Component</title>
      <dc:creator>21aki</dc:creator>
      <pubDate>Mon, 26 Feb 2024 15:01:32 +0000</pubDate>
      <link>https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no</link>
      <guid>https://dev.to/21aki/kaarsraang-ui-dwy-react-i-kaarsraang-react-component-29no</guid>
      <description>&lt;p&gt;เนืองจากมีหลายคนที่มาให้สอน React แต่เนื่องด้วยสอนแล้วมันไม่มีที่ที่จะเก็บเป็นหลักแหล่ง เลยจะมาเขียนเป็นโพสซีรี่ย์ตอนยาว โดยอ้างอิงจาก react.dev ในส่วนของ &lt;a href="https://react.dev/learn"&gt;Learn React&lt;/a&gt; แม้เอกสารจะอธิบายอย่างละเอียดแล้ว แต่เป็นภาษาอังกฤษ จึงขอแปลภาษาไทย ในภาษาของเราเอง และย่อเนื้อหาไม่ให้ยืดมาก&lt;/p&gt;

&lt;h2&gt;
  
  
  การสร้าง UI ด้วย React
&lt;/h2&gt;

&lt;p&gt;React เป็น Library สำหรับการสร้าง UI เพื่อนำส่วนต่างๆ ไปใช้ซ้ำ ในบทนี้เราจะเรียนรู้วิธีสร้าง, ปรับแต่ง และ การแสดง UI แบบมีเงื่อนไข ของ React Component&lt;/p&gt;




&lt;p&gt;ในซีรีย์นี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;การสร้าง React Component&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-ii-import-aela-export-component-pge"&gt;Import และ Export Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/21aki/kaarsraang-ui-dwy-react-iii-kaarekhiiyn-jsx-484h"&gt;เขียน JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ใช้ ปีกกา ใน JSX&lt;/li&gt;
&lt;li&gt;ส่งค่าผ่าน Props&lt;/li&gt;
&lt;li&gt;การแสดง Component แบบมีเงื่อนไข (Conditional Rendering)&lt;/li&gt;
&lt;li&gt;การแสดงข้อมูลเป็น List&lt;/li&gt;
&lt;li&gt;แยก Component (สร้าง Pure Component)&lt;/li&gt;
&lt;li&gt;มอง UI ให้เป็นแผนภูมิต้นไม้ (Tree Structure)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  การสร้าง React Component
&lt;/h2&gt;

&lt;p&gt;การเขียน React เป็นการสร้าง UI ส่วนย่อยๆ เรียกว่า Components, เขียนเป็นฟังก์ชั่น JavaScript ที่สามารถใช้ HTML ได้&lt;/p&gt;

&lt;h3&gt;
  
  
  Components: คือการประกอบร่าง UI
&lt;/h3&gt;

&lt;p&gt;ใน HTML เราสามารถสร้างหน้าตาเว็บด้วยแท็กต่างๆ เช่น &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; และ &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;My First Component&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Components: UI Building Blocks&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Defining a Component&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Using a Component&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React จะช่วยในการรวม HTML, CSS และ JavaScript เป็น Component และนำไปใช้ซ้ำได้ &lt;/p&gt;

&lt;p&gt;การใช้ Component ของ React เหมือนการใช้แท็กของ HTML เช่นเมื่อรวมโค้ด HTML ด้านบนเป็น Component ชื่อว่า &lt;code&gt;&amp;lt;TableOfContents /&amp;gt;&lt;/code&gt; สามารถนำ Component นี้ไปใช้ซ้ำที่ไหนได้ ดังตัวอย่าง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PageLayout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationHeader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SearchBar&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/docs"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Docs&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationHeader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Sidebar&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PageContent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TableOfContents&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DocumentationText&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;PageContent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;PageLayout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  การประกาศ Component
&lt;/h3&gt;

&lt;p&gt;ปกติการสร้างเว็บ เราจะเขียน HTML ก่อนแล้วใส่ JavaScript ไปกำกับ แต่ React จะเปลี่ยนเป็น เขียนฟังค์ชั่น JavaScript เพื่อแสดง HTML แทน (ดังตัวอย่างข้างล่าง):&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-dev-c269cw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Export ตัว Component
&lt;/h3&gt;

&lt;p&gt;ใช้คำสั่ง JavaScript &lt;code&gt;export default&lt;/code&gt; ในการประกาศฟังค์ชั่นหลักของไฟล์ เพื่อใช้ในการนำฟังค์ชั่นไปใช้ในไฟล์อื่นในภายหลัง&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: ตั้งชื่อฟังค์ชั่น
&lt;/h3&gt;

&lt;p&gt;ใช้ &lt;code&gt;function Profile() { }&lt;/code&gt; เพื่อสร้างฟังค์ชั่น JavaScript ชื่อ &lt;code&gt;Profile&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ ผิดกันง่ายๆ&lt;/strong&gt;&lt;br&gt;
Component ของ React ก็คือฟังค์ชั่น JavaScript แต่จะ&lt;u&gt;ต้องตั้งชื่อ ด้วยตัวพิมพ์ใหญ่นำหน้าเสมอ&lt;/u&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 3: ใส่ HTML เวอร์ชั่น JavaScript
&lt;/h3&gt;

&lt;p&gt;จากนั้นเราจะ return แท็ก &lt;code&gt;&amp;lt;img /&amp;gt;&lt;/code&gt;แต่จะต้องเป็นเวอร์ชั่นของ JavaScript ที่เรีกว่า JSX&lt;/p&gt;

&lt;p&gt;ถ้าเราจะ return บรรทัดเดียว:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/MK3eW3As.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Katherine Johnson"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ถ้าจะ return หลายบรรทัด ให้ใส่วงเล็บครอบ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/MK3eW3As.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Katherine Johnson"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ ผิดกันง่ายๆ&lt;/strong&gt;&lt;br&gt;
ถ้าไม่ครอบวงเล็บ โค้ดบรรทัดอื่นๆ หลัง &lt;code&gt;return&lt;/code&gt; จะไม่ถูกใช้งาน&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ใช้ Component
&lt;/h3&gt;

&lt;p&gt;เมื่อเราสร้าง Component &lt;code&gt;Profile&lt;/code&gt; แล้ว สามารถเอามันไปใช้ใน Component อื่นๆ ได้ เช่นเราจะสร้าง Component &lt;code&gt;Gallery&lt;/code&gt; ทีใช้ Component &lt;code&gt;Profile&lt;/code&gt; หลายอันข้างใน&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-dev-xgy8t9"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  สิ่งที่ Browser แสดง
&lt;/h3&gt;

&lt;p&gt;เมื่อ Browser นำไปแสดง จะถูกแปลงเป็น HTML ปกติ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Amazing scientists&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/MK3eW3As.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Katherine Johnson"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/MK3eW3As.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Katherine Johnson"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://i.imgur.com/MK3eW3As.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Katherine Johnson"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  การซ้อน และ การจัดการ Components
&lt;/h3&gt;

&lt;p&gt;Component เป็นฟังค์ชั่น JavaScript ธรรมดา ฉนั้น เราจะเขียน Component ไว้ในไฟล์เดียวกันได้ แต่ถ้าโค้ดของ Component เริ่มเยอะการแบ่ง 1 Component ต่อ 1 ไฟล์ จะทำให้จัดการง่ายกว่า&lt;/p&gt;

&lt;p&gt;จากโค้ดที่ผ่านมา จะเห็นว่าเราใช้ Component &lt;code&gt;Profile&lt;/code&gt; หลายๆ อันใน Component &lt;code&gt;Gallery&lt;/code&gt; เราจะเรียกความสัมพันธ์แบบนี้ว่า &lt;code&gt;Gallery&lt;/code&gt; เป็น Component แม่ (parent) และ &lt;code&gt;Profile&lt;/code&gt; เป็น Component ลูก (child)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ ผิดกันง่ายๆ&lt;/strong&gt;&lt;br&gt;
Component สามารถ render อีก Component ได้ แต่ไม่ควรประกาศซ้อนไว้ในอีก Component: &lt;/p&gt;


&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Gallery&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// 🔴 อย่าประกาศอีก Component ข้างใน Component แบบนี้!&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;แบบนี้ Bug จะเยอะและทำให้ช้า ทางที่ดีความประกาศแยกในชั้นบนสุด&lt;/p&gt;


&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Gallery&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ ประกาศ Component ในชั้นบนสุด&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;หาก Component ลูกต้องการข้อมูลจากแม่ ให้ส่งผ่าน Props แทนการประการฟังค์ชั่นซ้อน&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React ทำให้เราสร้าง Component หรือ UI ที่สามารถใช้ซ้ำได้&lt;/li&gt;
&lt;li&gt;ใน React ทุกส่วนย่อยๆ ของ UI เรียกว่า Component&lt;/li&gt;
&lt;li&gt;Component ของ React เป็นฟังค์ชั่น JavaScript ธรรมดา แต่:

&lt;ol&gt;
&lt;li&gt;ต้องตั้งชื่อขึ้นต้นด้วยตัวพิมพ์ใหญ่&lt;/li&gt;
&lt;li&gt;ต้อง return ด้วย JSX&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
