Next.js Static Site Generation (SSG) with getStaticProps: Sinhala Tutorial | Next.js SSG SC Guide

Next.js Static Site Generation (SSG) with getStaticProps
SC Guide
ආයුබෝවන් යාළුවනේ! අද අපි කතා කරන්න යන්නේ Next.js Framework එකේ තියෙන හරිම වැදගත් සහ ප්රයෝජනවත් සංකල්පයක් ගැන – ඒ තමයි Static Site Generation (SSG). විශේෂයෙන්ම, මේකට අපි පාවිච්චි කරන getStaticProps
කියන function
එක ගැන අපි විස්තරාත්මකව බලමු. ඔයාලට දැනටමත් Next.js
ගැන පොඩි අදහසක් තියෙනවා නම්, මේක තවත් පහසු වෙයි. නැතත්, ගැටළුවක් නෑ! අපි මුල සිටම පටන් ගමු.
වෙබ් අඩවි හදනකොට, Performance
සහ SEO (Search Engine Optimization)
කියන දේවල් හරිම වැදගත්. Next.js වගේ React Framework
එකකින් මේ දේවල් හරි ලේසියෙන් කරගන්න පුළුවන්. ඒකට තියෙන ප්රධානම ක්රමයක් තමයි මේ Static Site Generation (SSG) කියන්නේ.
අද මේ ලිපියෙන් අපි සාකච්ඡා කරන දේවල්:
- Static Site Generation (SSG) කියන්නේ මොකක්ද? (
build time
එකේදීpre-rendering
කරන හැටි) getStaticProps
කියන්නේ මොකක්ද? මේක කවදද පාවිච්චි කරන්නේ? කොහොමද වැඩ කරන්නේ?getStaticProps
පාවිච්චි කරලාdata fetch
කරලාpage
එකකටrender
කරන හැටි. (ප්රායෝගික උදාහරණයක්)troubleshooting tips
සහbest practices
.
එහෙනම්, අපි පටන් ගමු!
1. Static Site Generation (SSG) යනු කුමක්ද?
සරලවම කියනවා නම්, Static Site Generation (SSG) කියන්නේ අපේ වෙබ් අඩවියේ pages
ටික build
කරන වෙලාවේදී (build time
) සම්පූර්ණයෙන්ම HTML files විදිහට හදන ක්රමවේදයක්. සාමාන්යයෙන් වෙබ් page
එකක් user
කෙනෙක් request
කරනකොට server
එකෙන් dynamic
විදිහට හදලා (Server-Side Rendering - SSR
) නැත්නම් browser
එකේදී JavaScript
වලින් හදලා (Client-Side Rendering - CSR
) render
කරනවා. හැබැයි, SSG
වලදී, page
එක කලින්ම හදලා තියෙන නිසා, user request
එකක් ආපු ගමන්, සකස් කරපු HTML file එක serve
කරන්න පුළුවන්. හිතන්නකෝ, අපේ ගෙදරට කෙනෙක් එන්න කලින් කෑම හදලා, මේසෙට ගෙනත් තියෙනවා වගේ වැඩක්!
SSG වල වාසි මොනවාද?
- ඉහළ Performance:
pages
කලින්ම හැදලා තියෙන නිසා,user
කෙනෙක් ඉල්ලුවමserver
එකට අලුතින්page
එකක් හදන්න වෙලාවක් යන්නේ නෑ. HTML file එක කෙලින්මserve
කරන්න පුළුවන්. මේකෙන්loading time
එක ගොඩක් අඩු වෙනවා.උදා: Blog posts, documentation, marketing pages. - හොඳ SEO:
Search engines
(ගූගල් වගේ) අපේpage
එකට ආවම, සම්පූර්ණ HTMLcontent
එකම ඒ අයට ගන්න පුළුවන්.JavaScript render
වෙනකන් ඉන්න ඕනේ නෑ. මේකෙන්search engine rankings
වැඩි කරගන්න පුලුවන්. - අඩු Server Load:
page
එකක්request
කරන හැම වෙලාවකමserver
එකටcode execute
කරන්න අවශ්ය වෙන්නේ නෑ. ඒ නිසාserver
එකට එනload
එක අඩු වෙනවා. මේකtraffic
ගොඩක් තියෙනwebsites
වලට හරිම ප්රයෝජනවත්. - වැඩි Security:
server-side
එකේruntime
එකක් නැති නිසා,server-side attacks
වලට තියෙන අවස්ථා අඩුයි. - CDN හරහා Scalability: හැදූ HTML files
Content Delivery Network (CDN)
එකකcache
කරන්න පුළුවන්. මේකෙන්users
ලා කොහේ හිටියත්, ඒ අයට ලඟම තියෙනserver
එකෙන්content
එක ලැබෙනවා.
2. getStaticProps
විස්තරාත්මකව
getStaticProps
කියන්නේ Next.js වල තියෙන asynchronous function
එකක්. මේක අපිට පුලුවන් අපේ Next.js page
එකක component
එකක් export
කරනවා වගේම export
කරන්න. මේ function
එකේ ප්රධානම විශේෂත්වය තමයි, මේක build time
එකේදී, server-side
එකේ විතරක් execute
වෙන එක. client-side
එකේදී කවදාවත් execute
වෙන්නේ නෑ. ඒ කියන්නේ, user
කෙනෙක් අපේ වෙබ් අඩවියට ආවට පස්සේ, මේ function
එක නැවත run
වෙන්නේ නෑ.
getStaticProps
කවදාද පාවිච්චි කරන්නේ?
getStaticProps
භාවිතා කරන්න පුළුවන් හොඳම අවස්ථා:
- Data ඒ තරම් නිතර වෙනස් නොවන විට: Blog posts, products, documentation, portfolios වගේ දේවල් වලට මේක හරිම ගැළපෙනවා. මේවා නිතර
update
වෙන්නේ නෑනේ. - Data publicly available නම්:
User-specific
නොවන (ඒ කියන්නේ හැමෝටම එකම දත්ත පෙන්වන)data
වලට. - SEO ඉතා වැදගත් නම්:
Search engines
වලට අවශ්ය සියලු දත්ත HTMLcontent
එකේම තියෙන නිසාranking
වැඩි කරගන්න පුළුවන්.
getStaticProps
කොහොමද වැඩ කරන්නේ?
ඔයාලා Next.js
project එක build
කරනකොට (npm run build
හෝ yarn build
) Next.js විසින් getStaticProps
function
එක තියෙන හැම page
එකක්ම හඳුනාගෙන, ඒ function
එක execute
කරනවා. මේ function
එකෙන් return
කරන object
එකේ props
කියන key
එකට අදාළ data
එක අපි අපේ page component
එකට props
විදිහට ලබා දෙනවා. ඊට පස්සේ Next.js ඒ data
පාවිච්චි කරලා, page
එක pre-render
කරලා HTML file එකක් විදිහට export
කරනවා.
// pages/index.js (උදාහරණයක්)
export async function getStaticProps() {
// මෙතන තමයි data fetch කරන්නේ
// මේ code එක run වෙන්නේ server එකේ build කරන වෙලාවේදී විතරයි
const res = await fetch('https://api.example.com/posts');
const posts = await res.json();
// return කරන object එකේ props කියන key එකට data එක දෙන්න ඕනෙ
return {
props: {
posts, // page component එකට posts කියන prop එක යනවා
},
};
}
function HomePage({ posts }) {
// මෙතනදී posts කියන data එක component එකට ලැබිලා තියෙන්නේ
return (
<div>
<h1>අපේ Blog Posts</h1>
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
export default HomePage;
මේ code
එක හොඳට බැලුවොත් තේරෙයි, getStaticProps
කියන function
එක page component
එකට උඩින් export
කරලා තියෙනවා. මේක හැම විටම async
විය යුතුයි.
3. ප්රායෝගික උදාහරණයක්: getStaticProps
භාවිතා කර Data Fetch කර Page එකක Render කිරීම
දැන් අපි බලමු getStaticProps
පාවිච්චි කරලා API
එකකින් data fetch
කරලා අපේ Next.js page
එකක render
කරන්නේ කොහොමද කියලා. මේකට අපි JSONPlaceholder
කියන fake online REST API
එක පාවිච්චි කරමු. මේක demo
කරන්න හරිම පහසුයි.
මුලින්ම, අලුත් Next.js project එකක් හදාගමු (නැත්නම් දැනට තියෙන එකක් පාවිච්චි කරන්න පුළුවන්):
npx create-next-app my-ssg-app
cd my-ssg-app
npm run dev
දැන් pages
folder එක ඇතුලට ගිහින් අලුත් file
එකක් හදමු: pages/posts.js
කියලා.
3.1. දත්ත ලබා ගැනීම (Fetching Data)
pages/posts.js
file එක ඇතුලට පහත code
එක එකතු කරන්න:
// pages/posts.js
import React from 'react';
// මේක තමයි අපේ Page Component එක
function Posts({ posts }) {
return (
<div style={{ padding: '20px' }}>
<h1>අපේ Latest Posts</h1>
<p>මේ posts ටික build කරන වෙලාවේදී fetch කරපු data.</p>
<ul>
{posts.map(post => (
<li key={post.id} style={{ marginBottom: '15px', border: '1px solid #eee', padding: '10px', borderRadius: '5px' }}>
<h3 style={{ margin: '0 0 5px 0', color: '#333' }}>{post.title}</h3>
<p style={{ margin: '0', color: '#666' }}>{post.body}</p>
</li>
))}
</ul>
</div>
);
}
// getStaticProps function එක
// මේක run වෙන්නේ build කරන වෙලාවේදී server side එකේ විතරයි
export async function getStaticProps() {
console.log('getStaticProps is running on the server at build time!');
// API එකකින් data fetch කරනවා
const res = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=10');
const posts = await res.json();
// return කරන object එකේ props කියන key එකට data එක දෙනවා
return {
props: {
posts, // මේ posts array එක page component එකට prop එකක් විදිහට යනවා
},
};
}
export default Posts;
3.2. දත්ත Page එකේ පෙන්වීම (Rendering Data on the Page)
උඩ තියෙන code
එකේදී ඔයාලට පේනවා ඇති, getStaticProps
function
එකෙන් posts
කියන array
එක props
විදිහට return
කරනවා. Posts
කියන page component
එක posts
කියන prop
එක destructure
කරලා ගන්නවා. ඊට පස්සේ JSX
එක ඇතුලේ map
function
එක පාවිච්චි කරලා හැම post
එකක්ම list item
එකක් විදිහට render
කරනවා.
දැන් ඔයාලගේ project
එක build
කරලා බලමු. terminal
එකේ මේ command
එක දෙන්න:
npm run build
මේ command
එක execute
කරනකොට console
එකේ 'getStaticProps is running on the server at build time!'
කියලා message
එකක් පෙන්වයි. ඒ කියන්නේ අපේ getStaticProps
function
එක build time
එකේදී run
වුණා කියන එක. ඊට පස්සේ, build
එක ඉවර වුණාම start
කරන්න:
npm run start
දැන් browser
එකේ http://localhost:3000/posts
කියන URL
එකට ගිහින් බලන්න. ඔයාලට posts
ටික render
වෙලා පෙනෙයි! මේ page
එක සම්පූර්ණයෙන්ම HTML විදිහට pre-rendered
වෙලා තියෙන්නේ.
4. වැදගත් කරුණු සහ ගැටළු විසඳීම (Important Considerations & Troubleshooting)
revalidate
option එක (Incremental Static Regeneration - ISR)
getStaticProps
වලින් හැදෙන pages
සාමාන්යයෙන් build
එකක් කරනකම් update
වෙන්නේ නෑ. හැබැයි, අපිට data
පොඩ්ඩක් වෙනස් වෙන pages
වලටත් SSG
වල වාසි ගන්න පුළුවන්. ඒකට තමයි revalidate
කියන option
එක තියෙන්නේ. මේක getStaticProps
එකේ return
කරන object
එකට එකතු කරන්න පුළුවන්:
export async function getStaticProps() {
// ... data fetch ...
return {
props: {
posts,
},
revalidate: 60, // සෑම තත්පර 60කට වරක් page එක re-generate කරන්න
};
}
මේකෙන් වෙන්නේ, user request
එකක් ආවම, page
එක cache
එකෙන් serve
කරන ගමන්, background
එකේදී අලුත් data
තියෙනවද කියලා බලලා, cache
එක update
කරන එක. මේක Incremental Static Regeneration (ISR)
කියලා හඳුන්වනවා.
ගැටළු විසඳීම (Troubleshooting)
- Build Errors:
npm run build
කරනකොටerror
එනවා නම්,terminal
එකේlogs
හොඳට බලන්න. ගොඩක් වෙලාවටnetwork
errors
,API endpoint
එකේ වැරදි, නැත්නම්code
එකේsyntax errors
වෙන්න පුළුවන්. - Console Logs:
getStaticProps
එක ඇතුලේconsole.log()
පාවිච්චි කරන්න පුළුවන්debugging
කරන්න. මේlogs
පෙන්වන්නේbuild
කරන වෙලාවේterminal
එකේ මිසක්browser console
එකේ නෙවෙයි. - Incorrect Data Paths:
API
එකෙන් එනdata structure
එකට හරියටම ගැලපෙන්නprops
වලටdata access
කරනවාද කියලා බලන්න.
5. හොඳම පුරුදු සහ පොදු වැරදි (Best Practices & Common Pitfalls)
- නිතර වෙනස් නොවන දත්ත සඳහා පමණක් භාවිතා කරන්න:
real-time chat messages
,user-specific dashboards
වගේ නිතරupdate
වෙනdata
වලටgetStaticProps
පාවිච්චි කරන්න එපා. ඒ වගේ දේවල් වලටClient-Side Rendering (CSR)
හෝServer-Side Rendering (SSR)
වඩා හොඳයි. getStaticProps
client-side
එකේexecute
වෙන්නේ නෑ: මේක මතක තියාගන්න. ඒ නිසාbrowser-specific API
(window
,document
වගේ) මේfunction
එක ඇතුලේ පාවිච්චි කරන්න බෑ.getStaticProps
async
විය යුතුයි: හැම විටමasync function
එකක් විදිහටdefine
කරන්න. මේකrequired
එකක්.- ලොකු
data set
එකක් නම් අවධානය යොමු කරන්න: ගොඩක් විශාලdata set
එකක්fetch
කරනවා නම්build time
එක වැඩි වෙන්න පුළුවන්.pagination
,infinite scrolling
වගේtechniques
පාවිච්චි කරන්න පුළුවන්. - හැම විටම
props
key
එකreturn
කරන්න:getStaticProps
return
කරනobject
එකේprops
කියනkey
එක අනිවාර්යයෙන්ම තිබිය යුතුයි.
නිගමනය
ඉතින් යාළුවනේ, අපි Next.js වල තියෙන Static Site Generation (SSG) සහ ඒකට පාවිච්චි කරන getStaticProps
function
එක ගැන සම්පූර්ණයෙන් ඉගෙන ගත්තා. මේ feature
එක performance
, SEO
සහ scalability
අතින් විශාල වාසි ලබා දෙනවා. Blog posts, product catalogs (නිතර වෙනස් නොවන), documentation වගේ websites
හදනකොට getStaticProps
කියන්නේ ඔයාලට තියෙන හොඳම tool
එකක්.
Next.js මේ වගේ pre-rendering
options
ලබා දීම නිසා, අපිට web applications
හදනකොට අපේ අවශ්යතාවයට අනුව හොඳම rendering strategy
එක තෝරාගන්න පුළුවන්. මේකෙන් developers
ලට වගේම users
ලටත් ලොකු පහසුවක් සැලසෙනවා.
ඔයාලත් අදම මේක Try කරලා බලන්න. ඔයාලගේ Next.js project එකක getStaticProps
පාවිච්චි කරලා static content
එකක් render
කරන්න. මොනවා හරි ප්රශ්න තියෙනවා නම්, comment section
එකේ අහන්න පසුබට වෙන්න එපා. අපි උදව් කරන්න සූදානම්! එහෙනම් තවත් අලුත් tech topic
එකකින් හමුවෙමු!