ReactJS คือ ตอนที่ 6 : การแสดงผลตามเงื่อนไข (Conditional Rendering)

  1. ทำความเข้าใจเกี่ยวกับการแสดงผลตามเงื่อนไข (Conditional Rendering)
  2. เทคนิคต่างๆ ของการแสดงผลตามเงื่อนไข
    2.1 คำสั่ง If/Else
    2.2 ตัวแปรองค์ประกอบ (Element Variables)
    2.3 ตัวดำเนินการเงื่อนไขแบบไตรภาค (Ternary Conditional Operator)
    2.4 ตรรกะ (Logical) AND ตัวดำเนินการ (Operator) (&&)
    2.5 ผู้ประกอบการการรวมตัวกันเป็นโมฆะ (??) (Nullish Coalescing Operator)
    2.6 ตัวดำเนินการผูกมัดเสริม (?) (Optional Chaining Operator)
    2.7 คำสั่ง Switch Case

การทำเว็บ ReactJS และทำแอพ ซึ่งเป็นไลบรารี JavaScript ยอดนิยม ได้กลายเป็นวิธีแก้ปัญหาสำหรับนักพัฒนาจำนวนมาก ช่วยให้สามารถสร้างส่วนติดต่อผู้ใช้แบบโต้ตอบและไดนามิกได้ง่าย หนึ่งในคุณสมบัติที่ทรงพลังของมันคือความสามารถในการใช้การแสดงผลตามเงื่อนไข ซึ่งเป็นส่วนประกอบที่สำคัญสำหรับการทำเว็บ ReactJS และทำแอพที่ตอบสนองและโต้ตอบได้

1. ทำความเข้าใจเกี่ยวกับการแสดงผลตามเงื่อนไข (Conditional Rendering)

ก่อนที่เราจะเจาะลึกถึงหัวใจของการเรนเดอร์แบบมีเงื่อนไข เรามาดูภาพรวมคร่าวๆ ของจุดประสงค์กันก่อน ในรูปแบบพื้นฐานที่สุด การแสดงเงื่อนไขใน ReactJS หมายถึงความสามารถของส่วนประกอบในการตัดสินใจว่าจะแสดงองค์ประกอบใดตามเงื่อนไขที่กำหนด นี่อาจเป็นสถานะของส่วนประกอบ อุปกรณ์ประกอบฉากที่ส่งผ่านเข้าไป หรือตรรกะอื่นใดที่ฝังอยู่ภายในส่วนประกอบ

เหตุใดการเรนเดอร์แบบมีเงื่อนไขจึงมีความสำคัญในการทำเว็บ ReactJS และทำแอพ พูดง่ายๆ คือทำให้อินเทอร์เฟซผู้ใช้มีชีวิตชีวา อนุญาตให้มีการเปลี่ยนแปลงแบบไดนามิกใน UI ตามการโต้ตอบของผู้ใช้ สถานะของระบบ หรือตัวแปรอื่นๆ ตัวอย่างเช่น ข้อความต้อนรับอาจเปลี่ยนแปลงโดยขึ้นอยู่กับว่าผู้ใช้เข้าสู่ระบบหรือไม่ แบบฟอร์มอาจแสดงข้อความแสดงความสำเร็จหลังจากส่งสำเร็จหรือแสดงข้อความแสดงข้อผิดพลาดหากมีข้อผิดพลาดเกิดขึ้น

2. เทคนิคต่างๆ ของการแสดงผลตามเงื่อนไข

ReactJS มีหลายวิธีในการนำการแสดงผลตามเงื่อนไขไปใช้ แต่ละเทคนิคมีจุดแข็ง และตัวเลือกของคุณควรขึ้นอยู่กับข้อกำหนดเฉพาะในสถานการณ์ของคุณ ลองสำรวจเทคนิคเหล่านี้

2.1 คำสั่ง If/Else

คำสั่ง JavaScript พื้นฐานif/else เป็นวิธีที่ตรงไปตรงมาที่สุดเพื่อให้ได้การแสดงผลตามเงื่อนไข อย่างไรก็ตาม เนื่องจาก JSX ไม่ใช่แค่ JavaScript ล้วนๆ คุณจึงไม่สามารถแทรก if/else คำสั่งเข้าไปข้างในได้โดยตรง คุณสามารถใช้ if/else คำสั่งที่อยู่นอกคำสั่ง return ของเมธอดการเรนเดอร์ของคอมโพเนนต์ แทน

render() {
  const isLoggedIn = this.state.isLoggedIn;
  
  if (isLoggedIn) {
    return <h1>Welcome back!</h1>;
  } else {
    return <h1>Please sign up.</h1>;
  }
}

ในตัวอย่างข้างต้น วิธีการเรนเดอร์จะตรวจสอบisLoggedInสถานะ ก่อน ขึ้นอยู่กับว่าเป็นtrueหรือfalseมันจะส่งคืนองค์ประกอบ JSX ที่แตกต่างกัน

2.2 ตัวแปรองค์ประกอบ (Element Variables)

ในบางสถานการณ์ คุณอาจต้องแสดงนิพจน์ JSX มากเกินไปหรือใหญ่เกินไปแบบมีเงื่อนไข ในกรณีนี้ การใช้ตัวแปรองค์ประกอบอาจเป็นทางเลือกที่ดีกว่า ด้วยตัวแปรองค์ประกอบ คุณสามารถกำหนดนิพจน์ JSX ให้กับตัวแปรตามเงื่อนไขของคุณและส่งคืนตัวแปรนั้นในวิธีการเรนเดอร์ของคุณ

render() {
  const isLoggedIn = this.state.isLoggedIn;
  let message;

  if (isLoggedIn) {
    message = <h1>Welcome back!</h1>;
  } else {
    message = <h1>Please sign up.</h1>;
  }

  return <div>{message}</div>;
}

วิธีการนี้ช่วยให้โค้ดของคุณสะอาดขึ้นและอ่านง่ายขึ้น โดยเฉพาะอย่างยิ่งเมื่อนิพจน์ JSX ของคุณเริ่มซับซ้อนมากขึ้น

2.3 ตัวดำเนินการเงื่อนไขแบบไตรภาค (Ternary Conditional Operator)

โอเปอเรเตอร์ ternary ของ JavaScript หรือที่เรียกว่าโอเปอเรเตอร์เงื่อนไข ช่วยให้คุณลดความซับซ้อนของif/elseคำสั่งได้ สิ่งนี้มีประโยชน์อย่างยิ่งในรหัส JSX ของคุณ

render() {
  const isLoggedIn = this.state.isLoggedIn;

  return (
    <div>
      {isLoggedIn ? (
        <h1>Welcome back!</h1>
      ) : (
        <h1>Please sign up.</h1>
      )}
    </div>
  );
}

ในตัวอย่างนี้ เราใช้ตัวดำเนินการ ternary ภายในโค้ด JSX ถ้าisLoggedInเป็น มันtrueจะแสดงผล<h1>องค์ประกอบ แรก มิฉะนั้นจะทำให้อันที่สอง

2.4 ตรรกะ (Logical) AND ตัวดำเนินการ (Operator) (&&)

ตัวดำเนิน การเชิงตรรกะ AND ( &&) เป็นอีกวิธีหนึ่งในการบรรลุการแสดงผลตามเงื่อนไขใน React วิธีการนี้ใช้ดีที่สุดเมื่อคุณต้องการให้บางสิ่งแสดงผลตามเงื่อนไขที่กำหนด และไม่ต้องแสดงผลอะไรหากไม่ตรงตามเงื่อนไข

render() {
  const isLoggedIn = this.state.isLoggedIn;
  
  return (
    <div>
      {isLoggedIn && <h1>Welcome back!</h1>}
    </div>
  );
}

ในตัวอย่างด้านบน if isLoggedInis trueองค์ประกอบ<h1>จะถูกแสดง อย่างไรก็ตาม หากเป็นเช่นนั้นfalseจะไม่มีการเรนเดอร์อะไรเลย

เป็นที่น่าสังเกตว่า JavaScript ส่งคืนค่าเท็จแรกในการดำเนินการเชิงตรรกะและ ในกรณีของเรา if isLoggedInis falseจะเป็นค่าเท็จค่าแรกและค่าเดียว ดังนั้นfalseจะถูกส่งกลับ จากนั้น React จะละเว้นfalseค่านี้ระหว่างการเรนเดอร์ ดังนั้นจึงไม่แสดงอะไรเลย

2.5 ผู้ประกอบการการรวมตัวกันเป็นโมฆะ (??) (Nullish Coalescing Operator)

React อนุญาตให้แสดงผลตามเงื่อนไขโดยใช้ Nullish Coalescing Operator ( ??) ตัวดำเนินการนี้ส่งคืนอาร์กิวเมนต์แรกหากไม่เป็นโมฆะหรือไม่ได้กำหนด มิฉะนั้นจะส่งกลับอาร์กิวเมนต์ที่สอง

render() {
  const user = this.state.user;
  
  return (
    <div>
      <h1>{user.name ?? 'Guest'}</h1>
    </div>
  );
}

ในตัวอย่างด้านบน ถ้า user.name ไม่ใช่ null หรือ undefined จะแสดง มิฉะนั้น'Guest'จะแสดง

2.6 ตัวดำเนินการผูกมัดเสริม (?) (Optional Chaining Operator)

ตัวดำเนินการที่มีประโยชน์อีกตัวใน React คือตัวดำเนินการผูกมัดเพิ่มเติม ( ?.) ช่วยให้คุณเข้าถึงคุณสมบัติของวัตถุที่ซ้อนกันลึกโดยไม่ต้องกังวลว่าการอ้างอิงแต่ละรายการในห่วงโซ่นั้นถูกต้องหรือไม่

render() {
  const user = this.state.user;
  
  return (
    <div>
      <h1>{user?.name || 'Guest'}</h1>
    </div>
  );
}

ในตัวอย่างด้านบน if useris nullหรือundefinedจะส่งกลับทันทีundefinedและ ‘Guest’ จะแสดงผลแทนการโยนข้อผิดพลาด

2.7 คำสั่ง Switch Case

นอกจากนี้ยังสามารถใช้คำสั่ง Switch case สำหรับการแสดงผลตามเงื่อนไข โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับหลายเงื่อนไข วิธีการนี้มีประโยชน์ ตัวอย่างเช่น เมื่อคุณมีสถานะ UI ที่แตกต่างกันหลายสถานะ โดยขึ้นอยู่กับองค์ประกอบหรือตัวแปรสถานะเดียว

render() {
  const { userStatus } = this.state;

  let message;
  switch (userStatus) {
    case 'loggedIn':
      message = <h1>Welcome back!</h1>;
      break;
    case 'loggedOut':
      message = <h1>Please sign up.</h1>;
      break;
    default:
      message = <h1>Hello, guest!</h1>;
      break;
  }

  return <div>{message}</div>;
}

เมื่อทำเว็บ ReactJS และทำแอพ การแสดงผลตามเงื่อนไขเป็นเครื่องมือที่มีประสิทธิภาพในคลังแสงของคุณ ช่วยให้อินเทอร์เฟซผู้ใช้ของคุณเป็นไดนามิกและตอบสนอง ปรับแต่งเองตามสถานะของแอปพลิเคชันหรือการโต้ตอบของผู้ใช้

การเรนเดอร์แบบมีเงื่อนไขใน React อาจดูน่ากลัวในตอนแรก โดยเฉพาะอย่างยิ่งเมื่อมีหลายวิธีให้เลือก แต่เมื่อคุณเจาะลึกลงไปถึงการทำเว็บ ReactJS และทำแอพ วิธีการเหล่านี้จะเริ่มเข้าท่าในสถานการณ์ต่างๆ และจะชัดเจนขึ้นว่าเมื่อใดควรใช้วิธีใด

โปรดจำไว้ว่า ReactJS เป็นเรื่องเกี่ยวกับส่วนประกอบและการนำกลับมาใช้ใหม่ได้ คุณควรพยายามสร้างคอมโพเนนต์ขนาดเล็กที่ใช้ซ้ำได้ซึ่งจัดการตรรกะการเรนเดอร์ของตัวเอง แนวทางปฏิบัตินี้จะช่วยให้เข้าใจและดีบักการแสดงผลตามเงื่อนไขได้ง่ายขึ้นเมื่อแอปพลิเคชันของคุณมีความซับซ้อนมากขึ้น


React คืออะไร (ReactJS)

ReactJS คือ ตอนที่ 5 : การจัดการเหตุการณ์ (Event Handling)
ReactJS คือ ตอนที่ 7 : รายการ (Lists) และคีย์ (Keys)