Next.js - การแสดงผลล่วงหน้า

ใน Next.js เรารู้ว่ามันสร้าง HTML สำหรับหน้าที่เรียกว่าการแสดงผลล่วงหน้า Next.JS รองรับการแสดงผลล่วงหน้าสองประเภท

  • Static Generation- วิธีนี้จะสร้างหน้า HTML ในเวลาสร้าง HTML ที่แสดงผลล่วงหน้านี้ถูกส่งไปตามคำขอแต่ละรายการ วิธีนี้มีประโยชน์สำหรับเว็บไซต์ทางการตลาดบล็อกผลิตภัณฑ์อีคอมเมิร์ซที่แสดงรายการ wesites ความช่วยเหลือเว็บไซต์เอกสาร

  • Server Side Generation- วิธีนี้สร้างหน้า HTML ในแต่ละคำขอ วิธีนี้เหมาะเมื่อเนื้อหาของหน้า html อาจแตกต่างกันไปตามแต่ละคำขอ

ต่อหน้าการแสดงผลล่วงหน้า

Next.JS อนุญาตให้ตั้งค่าวิธีการแสดงผลล่วงหน้าสำหรับแต่ละเพจโดยที่เพจส่วนใหญ่ติดตามการสร้างแบบคงที่และเพจอื่น ๆ จะใช้การเรนเดอร์ฝั่งเซิร์ฟเวอร์

การสร้างแบบคงที่โดยไม่มีข้อมูล

การสร้างแบบคงที่สามารถทำได้โดยไม่มีข้อมูลในกรณีนี้หน้า HTML จะพร้อมโดยไม่จำเป็นต้องดึงข้อมูลล่วงหน้าจากนั้นจึงเริ่มการแสดงผล สามารถดึงข้อมูลได้ในภายหลังหรือตามคำขอ เทคนิคนี้ช่วยในการแสดง User Interface โดยไม่มีข้อมูลใด ๆ ในกรณีที่ข้อมูลต้องใช้เวลา

การสร้างแบบคงที่ด้วยข้อมูล

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

getStaticProps () ฟังก์ชั่นทำงานที่เวลาสร้างในการผลิตและรันสำหรับทุกคำขอในโหมด dev

มาสร้างตัวอย่างเพื่อสาธิตสิ่งเดียวกัน

ในตัวอย่างนี้เราจะสร้างการอัปเดต index.js และหน้าแรก js เพื่อให้เซิร์ฟเวอร์เข้าชมเพื่อรับข้อมูล

มาอัปเดตโปรเจ็กต์ nextjs ที่ใช้ในบทGlobal CSS Support

อัพเดตไฟล์ index.js ในไดเร็กทอรีเพจเพื่อใช้เมธอด getServerSideProps () วิธีนี้จะถูกเรียกต่อคำขอ

import Link from 'next/link'
import Head from 'next/head'

function HomePage(props) {
   return (
      <>
         <Head>
            <title>Welcome to Next.js!</title>
         </Head>
         <div>Welcome to Next.js!</div>
         <Link href="/posts/first"><a>First Post</a></Link>
         <br/>
         <div>Next stars: {props.stars}</div>
         <img src="/logo.png" alt="TutorialsPoint Logo" />
      </>	    
   )
}

export async function getServerSideProps(context) {
   const res = await fetch('https://api.github.com/repos/vercel/next.js')
   const json = await res.json()
   return {
      props: { stars: json.stargazers_count }
   }
}

export default HomePage

อัพเดตไฟล์ first.js ในไดเร็กทอรีเพจเพื่อใช้เมธอด getStaticProps () วิธีนี้จะถูกเรียกใช้ครั้งเดียว

import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'

export default function FirstPost(props) {
   return (
      <>
         <Container>
            <Head>
               <title>My First Post</title>
            </Head>
            <h1>My First Post</h1>
            <h2>
               <Link href="/">
                  <a>Home</a>
               </Link>
               <div>Next stars: {props.stars}</div>
            </h2>
         </Container>
      </>	  
   )
}

export async function getStaticProps() {
   const res = await fetch('https://api.github.com/repos/vercel/next.js')
   const json = await res.json()
   return {
      props: { stars: json.stargazers_count }
   }
}

เริ่มเซิร์ฟเวอร์ Next.js

รันคำสั่งต่อไปนี้เพื่อเริ่มเซิร์ฟเวอร์ -

npm run dev
> [email protected] dev \Node\nextjs
> next

ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait  - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait  - compiling...
event - compiled successfully

ตรวจสอบผลลัพธ์

เปิด localhost: 3000 ในเบราว์เซอร์และคุณจะเห็นผลลัพธ์ต่อไปนี้

คลิกที่ลิงค์โพสต์แรก