Išmokite, kaip panaudoti Next.js maketus kuriant patikimas, mastelį keičiančias ir globaliai pritaikytas programas. Atraskite geriausias bendrų UI komponentų praktikas.
Next.js maketai: bendrų vartotojo sąsajos komponentų modelių įsisavinimas globalioms programoms
Next.js tapo šiuolaikinio web kūrimo kertiniu akmeniu, garsėjančiu savo gebėjimu supaprastinti našų ir vartotojui draugiškų programų kūrimą. Šio gebėjimo pagrindas – efektyvus vartotojo sąsajos komponentų valdymas, o jo esmė slypi Next.js maketų (Layouts) galioje. Šis išsamus vadovas gilinasi į Next.js maketų panaudojimo subtilybes kuriant patikimas, mastelį keičiančias ir globaliai pritaikytas programas. Išnagrinėsime geriausias praktikas kuriant bendrus vartotojo sąsajos komponentus, kurie skatina kodo pakartotinį panaudojimą, palaikomumą ir vientisą vartotojo patirtį visame pasaulyje.
Maketų svarbos supratimas Next.js
Web kūrimo srityje, ypač naudojant karkasus kaip Next.js, maketai tarnauja kaip architektūrinis pagrindas, ant kurio statoma jūsų programos vartotojo sąsaja. Jie yra nuoseklių, pakartotinai naudojamų vartotojo sąsajos elementų planas, formuojantis bendrą vartotojo patirtį. Gerai struktūrizuotas programos dizainas, kuriame apgalvoti maketai, leidžia kūrėjams išvengti kodo dubliavimo ir supaprastina palaikymą. Iš esmės, jie suteikia karkasą:
- Nuoseklus prekės ženklas: Vieningo vizualinio identiteto palaikymas visuose puslapiuose.
- Bendra navigacija: Navigacijos meniu, poraščių ir kitų nuolatinių vartotojo sąsajos elementų, kurie rodomi keliuose puslapiuose, diegimas ir valdymas.
- Kodo pakartotinis panaudojimas: Išvengiama poreikio nuolat perrašinėti tą pačią vartotojo sąsajos logiką.
- SEO optimizavimas: Nuoseklių meta žymų, pavadinimo žymų ir kitų SEO elementų taikymas visoje svetainėje, prisidedant prie geresnių paieškos sistemų reitingų.
- Našumo pagerinimai: Naudojant Next.js siūlomas funkcijas, tokias kaip serverio pusės atvaizdavimas (SSR) ir statinių svetainių generavimas (SSG) su optimaliomis komponentų konfigūracijomis.
Pagrindinės Next.js maketų sąvokos ir privalumai
1. `_app.js` ir `_document.js` failai
Next.js, du specialūs failai atlieka kritiškai svarbų vaidmenį apibrėžiant maketus ir globalias konfigūracijas: `_app.js` ir `_document.js`. Jų paskirties supratimas yra fundamentalus.
_app.js
: Tai aukščiausio lygio komponentas, kuris apgaubia visus kitus jūsų programos puslapius. Paprastai šį failą naudojate:- Inicijuoti globalų CSS ar stilių komponentus.
- Pateikti duomenis jūsų komponentams naudojant konteksto teikėjus.
- Apgaubti jūsų programą su teikėjais, tokiais kaip Redux ar Zustand, būsenos valdymui.
- Apibrėžti globalų maketą, kuris taikomas visiems puslapiams, pavyzdžiui, nuolatinę antraštę ar poraštę.
_document.js
: Tai labiau pažengęs konfigūracijos failas, kuriame galite kontroliuoti paties HTML dokumento serverio pusės atvaizdavimą. Šis failas leidžia jums modifikuoti<html>
,<head>
ir<body>
žymas. Jis pirmiausia naudojamas sudėtingesniam SEO ir našumo optimizavimui. Paprastai `_document.js` naudojate:- Įtraukti išorinius šriftus, scenarijus ir stilių lenteles.
- Nustatyti numatytąją HTML dokumento struktūrą.
- Pritaikyti serverio pusės atvaizdavimo procesą.
2. Maketų naudojimo privalumai
Maketų naudojimas suteikia daugybę privalumų, ypač kuriant dideles, sudėtingas web programas:
- Geresnė kodo organizacija: Atskiriant vartotojo sąsajos komponentus į pakartotinai naudojamus modulius, pagerinate kodo skaitomumą ir palaikomumą.
- Supaprastintas palaikymas: Kai reikalingi pakeitimai, jums tereikia atnaujinti maketo komponentą, ir tie pakeitimai atsispindi visoje programoje.
- Pagerintas našumas: Maketai gali optimizuoti turinio pristatymą, kas lemia greitesnį puslapių įkėlimo laiką ir geresnę vartotojo patirtį.
- Nuosekli vartotojo patirtis: Nuoseklus maketas užtikrina, kad vartotojai turės pažįstamą patirtį naršydami jūsų programoje.
- SEO nauda: Nuosekli HTML struktūra ir meta žymos (dažnai valdomos maketuose) pagerina paieškos sistemų reitingus ir matomumą.
Bendrų vartotojo sąsajos komponentų modelių diegimas
1. Pagrindinio maketo komponento kūrimas
Sukurkime paprastą maketo komponentą. Šis komponentas apims antraštę, pagrindinio turinio sritį ir poraštę. Jis sukurtas taip, kad būtų naudojamas keliuose puslapiuose.
// components/Layout.js
import Head from 'next/head';
function Layout({ children, title }) {
return (
<>
<Head>
<title>{title} | Mano Programa</title>
<meta name="description" content="Mano Next.js programa" />
</Head>
<header>
<h1>Mano Programos Antraštė</h1>
</header>
<main>{children}</main>
<footer>
<p>© {new Date().getFullYear()} Mano Programa. Visos teisės saugomos.</p>
</footer>
</>
);
}
export default Layout;
Šiame pavyzdyje `Layout` komponentas gauna `children` ir `title` kaip savybes. `children` atspindi puslapio turinį, kuris bus atvaizduojamas maketo viduje, o `title` nustato puslapio pavadinimo žymą SEO tikslais.
2. Maketo komponento naudojimas puslapyje
Dabar pritaikykime šį maketą vienam iš jūsų puslapių (pvz., `pages/index.js`).
// pages/index.js
import Layout from '../components/Layout';
function HomePage() {
return (
<Layout title="Pagrindinis">
<h2>Sveiki atvykę į pagrindinį puslapį</h2>
<p>Tai yra pagrindinis pagrindinio puslapio turinys.</p>
</Layout>
);
}
export default HomePage;
`pages/index.js` faile importuojame `Layout` komponentą ir apgaubiame juo puslapio turinį. Taip pat pateikiame puslapiui būdingą `title`. `children` savybė `Layout` komponente bus užpildyta turiniu, esančiu tarp `<Layout>` žymų `index.js` faile.
3. Pažangios maketo funkcijos
- Dinaminis duomenų gavimas: Galite naudoti `getServerSideProps` arba `getStaticProps` duomenims gauti savo maketo komponente. Tai leidžia jums įterpti duomenis į antraštę ar navigaciją iš duomenų šaltinio.
- Konteksto teikėjai: Išnaudokite React kontekstą, kad dalintumėtės būsena ir duomenimis tarp komponentų, apgaubtų maketu. Tai būtina norint valdyti temas, vartotojo autentifikavimą ir kitas globalias programos būsenas.
- Sąlyginis atvaizdavimas: Įdiekite sąlyginį atvaizdavimą savo makete, kad rodytumėte skirtingus vartotojo sąsajos elementus priklausomai nuo vartotojo autentifikavimo, ekrano dydžio ar kitų veiksnių.
- Stiliai: Įtraukite CSS-in-JS (pvz., styled-components, Emotion), CSS modulius arba paprastą CSS tiesiogiai į savo maketo komponentą.
Globalūs aspektai tarptautinėms programoms
Kuriant maketus globaliai auditorijai, labai svarbu atsižvelgti į kelis internacionalizacijos ir globalizacijos (i18n/g11n) aspektus. Šios praktikos užtikrina, kad jūsų programa būtų prieinama ir patogi naudoti asmenims iš įvairių kultūrinių aplinkų.
1. Internacionalizacija (i18n) ir lokalizacija (l10n)
- i18n (Internacionalizacija): Sukurkite savo programą taip, kad ją būtų galima pritaikyti skirtingoms kalboms ir regionams. Tai apima teksto abstrahavimą, datų ir skaičių formatų tvarkymą bei skirtingų simbolių rinkinių palaikymą.
- l10n (Lokalizacija): Pritaikykite savo programą konkrečiai vietovei, įskaitant kalbos vertimą, valiutos formatavimą, datos/laiko formatus ir kultūrines nuostatas.
2. i18n diegimas Next.js maketuose
Norėdami įdiegti i18n Next.js, galite naudoti įvairias bibliotekas, tokias kaip `next-i18next` arba integruotą `next/router` maršrutizavimu pagrįstiems sprendimams.
Štai supaprastintas pavyzdys su `next-i18next`, naudojant `_app.js` failą. Tai nustato i18n programos lygmeniu. Įsitikinkite, kad įdiegėte reikiamus paketus naudodami `npm install i18next react-i18next next-i18next`. Šis pavyzdys demonstruoja supaprastintą integraciją ir gali reikalauti pakeitimų, atsižvelgiant į konkrečius reikalavimus.
// _app.js
import { appWithTranslation } from 'next-i18next';
import '../styles/global.css'; // Importuokite savo globalius stilius
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
export default appWithTranslation(MyApp);
Šiame `_app.js` faile `appWithTranslation` suteikia internacionalizacijos kontekstą programai.
Tada savo makete naudokite `useTranslation` kabliuką, kurį teikia `react-i18next`:
// components/Layout.js
import { useTranslation } from 'react-i18next';
import Head from 'next/head';
function Layout({ children, title }) {
const { t } = useTranslation(); // Gaukite vertimo funkciją
return (
<>
<Head>
<title>{t('layout.title', { title })}</title>
<meta name="description" content={t('layout.description')} />
</Head>
<header>
<h1>{t('layout.header')}</h1>
</header>
<main>{children}</main>
<footer>
<p>{t('layout.footer', { year: new Date().getFullYear() })}</p>
</footer>
</>
);
}
export default Layout;
Tada turėtumėte savo vertimų failus, paprastai saugomus `public/locales/[locale]/[namespace].json` struktūroje. Pavyzdžiui, `public/locales/en/common.json` galėtų turėti:
{
"layout": {
"title": "{{title}} | Mano Programa",
"description": "Mano Next.js programos aprašymas",
"header": "Mano Programos Antraštė",
"footer": "© {{year}} Mano Programa. Visos teisės saugomos."
}
}
O `public/locales/fr/common.json` (prancūzų kalbai) galėtų turėti:
{
"layout": {
"title": "{{title}} | Mon Application",
"description": "Description de mon application Next.js",
"header": "En-tête de mon application",
"footer": "© {{year}} Mon application. Tous droits réservés."
}
}
Pastaba: Šis pavyzdys pateikia pagrindinį požiūrį į i18n integraciją ir reikalauja papildomos konfigūracijos (pvz., kalbos nustatymo, maršrutizavimo nustatymų). Išsamesnių nurodymų ieškokite `next-i18next` dokumentacijoje.
3. Adaptyvus dizainas ir maketai
Adaptyvus dizainas yra labai svarbus globaliai auditorijai. Jūsų maketas turi prisitaikyti prie įvairių ekrano dydžių ir įrenginių. Naudokite CSS karkasus, tokius kaip Bootstrap, Tailwind CSS, arba kurkite pasirinktines medijos užklausas, kad užtikrintumėte nuoseklią ir vartotojui draugišką patirtį visuose įrenginiuose.
4. Prieinamumo aspektai
Laikykitės prieinamumo gairių (WCAG), kad jūsų programa būtų naudojama žmonėms su negalia. Tai apima:
- Semantinis HTML: Naudokite semantinius HTML elementus (
<nav>
,<article>
,<aside>
), kad logiškai struktūrizuotumėte savo turinį. - Alternatyvus tekstas paveikslėliams: Visada pateikite aprašomuosius `alt` atributus paveikslėliams.
- Navigacija klaviatūra: Užtikrinkite, kad jūsų programa būtų naršoma naudojant tik klaviatūrą.
- Spalvų kontrastas: Palaikykite pakankamą spalvų kontrastą tarp teksto ir fono.
- ARIA atributai: Naudokite ARIA atributus, kad prireikus pagerintumėte prieinamumą.
5. Datos ir laiko formatavimas
Skirtingi regionai turi skirtingas datos ir laiko formatų konvencijas. Užtikrinkite, kad datos ir laikas būtų rodomi teisingai, atsižvelgiant į vartotojo lokalę. Bibliotekos, tokios kaip `date-fns` arba integruota `Intl` API JavaScript, gali tai sutvarkyti.
import { format } from 'date-fns';
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { i18n } = useTranslation();
const currentDate = new Date();
const formattedDate = format(currentDate, 'MMMM d, yyyy', { locale: i18n.language });
return <p>{formattedDate}</p>;
}
6. Valiutos formatavimas
Rodykite pinigines vertes teisingu formatu kiekvienai vietovei. `Intl.NumberFormat` API yra vertinga tvarkant valiutos formatavimą.
function MyComponent() {
const { i18n } = useTranslation();
const price = 1234.56;
const formattedPrice = new Intl.NumberFormat(i18n.language, { // Naudokite i18n.language localei
style: 'currency',
currency: 'USD', // Arba dinamiškai nustatykite valiutą pagal vartotojo nustatymus
}).format(price);
return <p>{formattedPrice}</p>
}
7. Iš dešinės į kairę (RTL) rašomos kalbos
Jei jūsų programa turi palaikyti kalbas, tokias kaip arabų ar hebrajų (RTL kalbos), sukurkite maketą taip, kad jis tai palaikytų. Apsvarstykite galimybę naudoti CSS savybes, tokias kaip `direction: rtl;`, ir koreguoti vartotojo sąsajos elementų pozicijas.
8. Turinio pristatymo tinklai (CDN) ir našumas
Naudokite CDN, kad pateiktumėte savo programos statinius išteklius (paveikslėlius, CSS, JavaScript) iš serverių, geografiškai esančių arčiau jūsų vartotojų. Tai sumažina delsą ir pagerina puslapių įkėlimo laiką tarptautiniams vartotojams. Next.js integruota paveikslėlių optimizacija ir CDN integracija gali žymiai pagerinti našumą.
9. SEO optimizavimas globalioms rinkoms
Paieškos sistemų optimizavimas (SEO) yra labai svarbus norint pritraukti vartotojus visame pasaulyje. Naudokite šias technikas:
- Kalbai būdingi URL: Naudokite kalbų kodus savo URL (pvz., `/lt/`, `/en/`, `/de/`), kad nurodytumėte turinio kalbą.
- hreflang žymos: Įdiekite `hreflang` žymas savo HTML `` skiltyje. Šios žymos nurodo paieškos sistemoms tinklalapio kalbą ir regioninį taikymą. Tai būtina norint užtikrinti, kad paieškos rezultatuose būtų rodoma teisinga jūsų turinio versija.
- Meta aprašymai ir pavadinimo žymos: Optimizuokite savo meta aprašymus ir pavadinimo žymas kiekvienai kalbai ir regionui.
- Turinio kokybė: Pateikite aukštos kokybės, originalų turinį, kuris yra aktualus jūsų tikslinei auditorijai.
- Svetainės greitis: Optimizuokite svetainės greitį, nes tai yra svarbus reitingavimo veiksnys. Išnaudokite Next.js našumo optimizacijas.
`hreflang` žymų pavyzdys jūsų `Layout` komponento `
` skiltyje:
<Head>
<title>{t('layout.title', { title })}</title>
<meta name="description" content={t('layout.description')} />
<link rel="alternate" href="https://www.example.com/" hreflang="x-default" /> {/* This should be outside the curly brace */}
<link rel="alternate" href="https://www.example.com/en/" hreflang="en" />
<link rel="alternate" href="https://www.example.com/fr/" hreflang="fr" />
// Daugiau kalbų variantų
</Head>
Pažangios maketų strategijos
1. Kodo skaidymas su maketais
Next.js automatiškai atlieka kodo skaidymą, siekiant pagerinti našumą, tačiau galite tiksliau suderinti šį elgesį naudodami dinaminius importus, ypač savo maketuose. Dinamiškai importuodami didesnius komponentus, galite sumažinti pradinio JavaScript paketo dydį, kas lemia greitesnį pradinį įkėlimo laiką.
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/LargeComponent'));
function Layout({ children }) {
return (
<>
<header>...</header>
<main>
{children}
<DynamicComponent /> <!-- Dinamiškai įkeliamas komponentas -->
</main>
<footer>...</footer>
</>
);
}
Pavyzdyje `LargeComponent` įkeliamas dinamiškai. Dinaminis importavimas atideda šio komponento atsisiuntimą, kol jo iš tikrųjų prireikia.
2. Maketai su serverio pusės atvaizdavimu (SSR)
Next.js SSR galimybės leidžia iš anksto atvaizduoti turinį serveryje, pagerinant SEO ir pradinį įkėlimo laiką. Galite įdiegti SSR savo maketuose, kad gautumėte duomenis prieš puslapį pristatant klientui. Tai ypač svarbu turiniui, kuris dažnai keičiasi arba turėtų būti indeksuojamas paieškos sistemų.
Naudodami `getServerSideProps` puslapyje, galite perduoti duomenis į maketą:
// pages/posts/[id].js
import Layout from '../../components/Layout';
export async function getServerSideProps(context) {
const { id } = context.params;
const res = await fetch(`https://api.example.com/posts/${id}`);
const post = await res.json();
return {
props: {
post,
},
};
}
function PostPage({ post }) {
return (
<Layout title={post.title}>
<h1>{post.title}</h1>
<p>{post.content}</p>
</Layout>
);
}
export default PostPage;
`getServerSideProps` funkcija gauna įrašo duomenis. Tada `post` duomenys perduodami kaip savybė į `Layout`.
3. Maketai su statinių svetainių generavimu (SSG)
Turiniui, kuris dažnai nesikeičia, SSG suteikia didelių našumo privalumų. Jis iš anksto atvaizduoja puslapius kūrimo metu, generuodamas statinius HTML failus, kurie tiesiogiai pateikiami vartotojui. Norėdami naudoti SSG, įdiekite `getStaticProps` funkciją savo puslapio komponentuose, o duomenis galima perduoti į maketą.
// pages/about.js
import Layout from '../components/Layout';
export async function getStaticProps() {
const aboutData = { title: 'Apie mus', content: 'Šiek tiek informacijos apie mūsų įmonę.' };
return {
props: {
aboutData,
},
};
}
function AboutPage({ aboutData }) {
return (
<Layout title={aboutData.title}>
<h2>{aboutData.title}</h2>
<p>{aboutData.content}</p>
</Layout>
);
}
export default AboutPage;
Šiame SSG pavyzdyje `getStaticProps` gauna duomenis kūrimo metu ir tada juos perduoda `AboutPage`, kuris vėliau atvaizduojamas naudojant `Layout` komponentą.
4. Įdėtieji maketai
Sudėtingoms programoms gali prireikti įdėtųjų maketų. Tai reiškia turėti maketus maketuose. Pavyzdžiui, galite turėti pagrindinį programos maketą ir tada naudoti skirtingus maketus konkrečioms svetainės skiltims. Tai leidžia smulkmeniškai kontroliuoti vartotojo sąsają.
// components/MainLayout.js
function MainLayout({ children }) {
return (
<>
<header>Pagrindinė antraštė</header>
<main>{children}</main>
<footer>Pagrindinė poraštė</footer>
</>
);
}
export default MainLayout;
// components/SectionLayout.js
function SectionLayout({ children }) {
return (
<div className="section-wrapper">
<aside>Skilties navigacija</aside>
<div className="section-content">{children}</div>
</div>
);
}
export default SectionLayout;
// pages/section/[page].js
import MainLayout from '../../components/MainLayout';
import SectionLayout from '../../components/SectionLayout';
function SectionPage({ page }) {
return (
<MainLayout>
<SectionLayout>
<h1>Skilties puslapis: {page}</h1>
<p>Turinys skilties puslapiui {page}.</p>
</SectionLayout>
</MainLayout>
);
}
export async function getServerSideProps(context) {
const { page } = context.query;
return {
props: {
page,
},
};
}
export default SectionPage;
Šiuo atveju `SectionPage` yra apgaubtas tiek `MainLayout`, tiek `SectionLayout`, kad būtų sukurta įdėtųjų maketų struktūra.
Geriausios praktikos ir optimizavimo patarimai
1. Komponentų kompozicija
Išnaudokite komponentų kompoziciją. Suskaidykite savo maketus ir vartotojo sąsajos elementus į mažesnius, pakartotinai naudojamus komponentus. Tai pagerina kodo skaitomumą ir palaikomumą.
2. Našumo stebėjimas
Nuolat stebėkite savo maketų ir programos našumą naudodami įrankius, tokius kaip Google Lighthouse ar WebPageTest. Šie įrankiai gali padėti jums nustatyti našumo kliūtis ir optimizavimo sritis.
3. Spartinimo strategijos
Įdiekite spartinimo (caching) strategijas, kad sumažintumėte serverio apkrovą ir pagerintumėte atsako laiką. Apsvarstykite dažnai naudojamų duomenų spartinimą, naršyklės spartinimo naudojimą statiniams ištekliams ir turinio pristatymo tinklo (CDN) įdiegimą, kad spartintumėte turinį arčiau vartotojo.
4. Atidėtasis įkėlimas
Naudokite atidėtąjį įkėlimą (lazy loading) paveikslėliams ir kitiems neesminiams komponentams. Šis metodas atideda išteklių įkėlimą, kol jų prireikia, sumažindamas pradinį puslapio įkėlimo laiką.
5. Venkite perteklinio pervaizdavimo
Optimizuokite savo komponentus, kad išvengtumėte nereikalingo pervaizdavimo (re-renders). Naudokite `React.memo`, `useMemo` ir `useCallback` komponentams ir funkcijoms atmintyje išsaugoti (memoize). Tinkamai naudokite `key` savybę, kai atvaizduojate komponentų sąrašus, kad padėtumėte React efektyviai identifikuoti pakeitimus.
6. Testavimas
Įdiekite išsamų savo maketo komponentų testavimą, įskaitant vienetinius (unit) ir integracinius testus, kad užtikrintumėte, jog jie veikia kaip tikėtasi ir išlaiko nuoseklų elgesį. Testuokite maketus skirtingų dydžių ekranuose ir skirtingose lokalėse.
Išvada
Next.js maketai siūlo galingus ir universalius įrankius išskirtinėms web programoms kurti. Įsisavinę šiame vadove aptartas technikas, galite sukurti gerai struktūrizuotas, palaikomas ir našias vartotojo sąsajas. Nepamirškite taikyti internacionalizacijos ir globalizacijos geriausių praktikų, kad užtikrintumėte, jog jūsų programa rezonuotų su globalia auditorija. Sujungę Next.js galią su apgalvotu požiūriu į maketus, būsite gerai pasirengę kurti šiuolaikiškas, mastelį keičiančias ir visuotinai prieinamas web patirtis.