Ստեղծեք նորաձև Next.js ձևեր React Hook ձևով և նյութի միջերեսով


Ձեր ձևերը կարգի բերեք ֆունկցիոնալ և դիզայներական գրադարանների այս համադրությամբ:

Material UI (MUI) բաղադրիչի հանրաճանաչ գրադարան է, որն իրականացնում է Google-ի Նյութերի դիզայնի համակարգը: Այն ապահովում է նախապես կառուցված UI բաղադրիչների լայն շրջանակ, որոնք կարող եք օգտագործել ֆունկցիոնալ և տեսողականորեն գրավիչ միջերեսներ ստեղծելու համար:

Թեև այն նախատեսված է React-ի համար, դուք կարող եք ընդլայնել դրա հնարավորությունները React-ի էկոհամակարգի այլ շրջանակների վրա, օրինակ՝ Next.js-ի:

Ինչպես սկսել React Hook Form-ի և Material UI-ի հետ

React Hook Form-ը հանրաճանաչ գրադարան է, որն ապահովում է ձևեր ստեղծելու, կառավարելու և վավերացնելու պարզ և դեկլարատիվ եղանակ:

Ինտեգրելով Material UI-ի UI բաղադրիչներն ու ոճերը՝ դուք կարող եք ստեղծել գեղեցիկ ձևեր, որոնք հեշտ է օգտագործել, և հետևողական ձևավորում կիրառել ձեր Next.js հավելվածում:

Սկսելու համար տեղադրեք Next.js նախագիծը տեղում: Այս ուղեցույցի նպատակների համար տեղադրեք Next.js-ի վերջին տարբերակը, որն օգտագործում է App գրացուցակը:

npx create-next-app@latest next-project --app

Հաջորդը, տեղադրեք այս փաթեթները ձեր նախագծում.

npm install react-hook-form @mui/material @mui/system @emotion/react @emotion/styled

Ահա նախադիտումը, թե ինչ եք կառուցելու.

Դուք կարող եք գտնել այս նախագծի կոդը այս GitHub պահոցում:

Ձևերի ձևավորում և ձևավորում

React Hook Form-ը տրամադրում է մի շարք օգտակար գործառույթներ, ներառյալ useForm կեռիկը:

Այս կեռիկը պարզեցնում է ձևի վիճակի, մուտքագրման վավերացման և ներկայացման գործընթացը՝ պարզեցնելով ձևերի կառավարման հիմնարար ասպեկտները:

Այս կեռիկից օգտվելու ձև ստեղծելու համար ավելացրեք հետևյալ կոդը նոր ֆայլում՝ src/components/form.js:

Նախ, ավելացրեք պահանջվող ներմուծումները React Hook Form-ի և MUI փաթեթների համար.

"use client"
import React, {useState} from 'react';
import { useForm } from 'react-hook-form';
import { TextField, Button as MuiButton, Alert } from '@mui/material';
import { styled } from '@mui/system';

MUI-ն տրամադրում է օգտագործման համար պատրաստի UI բաղադրիչների հավաքածու, որոնք կարող եք հետագայում հարմարեցնել՝ փոխանցելով ոճավորման պարագաներ:

Այնուամենայնիվ, եթե ցանկանում եք ավելի շատ ճկունություն և վերահսկողություն UI դիզայնի վրա, կարող եք ընտրել ոճավորված մեթոդը՝ ձեր UI տարրերը CSS հատկություններով ոճավորելու համար: Այս դեպքում դուք կարող եք ոճավորել ձևի հիմնական բաղադրիչները՝ հիմնական կոնտեյները, ինքնին ձևը և մուտքագրված տեքստային դաշտերը:

Ներմուծման անմիջապես ներքեւում ավելացրեք այս կոդը.

const FormContainer = styled('div')({
  display: 'flex',
  flexDirection: 'column',
  alignItems: 'center',
  justifyContent: 'center',
  height: '100vh',
});
const StyledForm = styled('form')({
  width: '80%',
  maxWidth: '400px',
  padding: '20px',
  borderRadius: '10px',
  border: '2px solid #1E3A8A',
  boxShadow: '0px 0px 10px rgba(0, 0, 0, 0.2)',
  backgroundColor: '#ffffff',
  textAlign: 'center',
});
const StyledTextField = styled(TextField)({
  marginBottom: '16px',
  width: '100%',
});

Մոդուլային կոդի բազայի պահպանումը կարևոր է զարգացման մեջ: Այդ իսկ պատճառով, ամբողջ ծածկագիրը մեկ ֆայլի մեջ միացնելու փոխարեն, դուք պետք է սահմանեք և ոճավորեք հատուկ բաղադրիչները առանձին ֆայլերում:

Այսպիսով, դուք կարող եք հեշտությամբ ներմուծել և օգտագործել այս բաղադրիչները ձեր հավելվածի տարբեր մասերում՝ դարձնելով ձեր կոդը ավելի կազմակերպված և պահպանելի:

Այժմ սահմանեք ֆունկցիոնալ բաղադրիչը.

export default function Form() {
  const { register, handleSubmit, formState: { errors } } = useForm();
  
  return (
    <>
      <FormContainer>
        <StyledForm>
          <StyledTextField
            label="Username"
            type="text"
          />
          <StyledTextField
            label="Password"
            type="password"
          />
          <MuiButton 
            type="submit" 
            variant="contained" 
            color="primary" 
            margin="5px" 
          > Submit </MuiButton>
        </StyledForm>
      </FormContainer>
    </>
  );
}

Վերջապես, ներմուծեք այս բաղադրիչը ձեր app/page.js ֆայլում: Ջնջեք ամբողջ կաթսայատան Next.js կոդը և թարմացրեք այն հետևյալով.

import Form from 'src/components/Form'
export default function Home() {
  return (
    <main >
      <Form />
    </main>
  )
}

Գործարկեք զարգացման սերվերը, և դուք պետք է տեսնեք հիմնական ձևը երկու մուտքագրման դաշտերով և ուղարկելու կոճակով ձեր բրաուզերում:

Կառավարման ձևի վավերացում

Ձևը հիանալի տեսք ունի, բայց դեռ ոչինչ չի անում: Այն գործունակ դարձնելու համար անհրաժեշտ է ավելացնել վավերացման որոշ կոդ: useForm hook utility ֆունկցիաները օգտակար կլինեն օգտատիրոջ մուտքերը կառավարելիս և վավերացնելիս:

Նախ, սահմանեք հետևյալ վիճակի փոփոխականը՝ ընթացիկ ձևի կարգավիճակը կառավարելու համար՝ կախված նրանից, թե արդյոք օգտվողը տրամադրել է ճիշտ հավատարմագրերը: Ավելացրեք այս կոդը ֆունկցիոնալ բաղադրիչի ներսում.

const [formStatus, setFormStatus] = useState({ success: false, error: '' });

Հաջորդը, ստեղծեք կարգավորիչի գործառույթ՝ հավատարմագրերը հաստատելու համար: Այս գործառույթը կսիմուլյացի HTTP API-ի հարցումը, որը սովորաբար տեղի է ունենում, երբ հաճախորդի հավելվածները փոխազդում են հետին մասի նույնականացման API-ի հետ:

const onSubmit = (data) => {
    if (data.username === 'testuser' && data.password === 'password123') {
        setFormStatus({ success: true, error: '' });
    } else {
        setFormStatus({ success: false, error: 'Invalid username or password' });
    }
};

Կոճակի բաղադրիչին ավելացրեք onClick իրադարձությունների մշակման գործառույթը՝ այն փոխանցելով որպես հենարան, որպեսզի գործարկվի onSubmit ֆունկցիան, երբ օգտատերը սեղմում է ուղարկել կոճակը:

onClick={handleSubmit(onSubmit)}

formStatus վիճակի փոփոխականի արժեքը կարևոր է, քանի որ այն կորոշի, թե ինչպես եք հետադարձ կապ տրամադրում օգտատիրոջը: Եթե օգտվողը մուտքագրի ճիշտ հավատարմագրերը, դուք կարող եք ցույց տալ հաջողության հաղորդագրություն: Եթե ունեք այլ էջեր ձեր Next.js հավելվածում, կարող եք դրանք վերահղել այլ էջ:

Դուք նաև պետք է համապատասխան կարծիք ներկայացնեք, եթե հավատարմագրերը սխալ են: Material UI-ն առաջարկում է հետադարձ կապի հիանալի բաղադրիչ, որը կարող եք օգտագործել React-ի պայմանական մատուցման տեխնիկայի հետ մեկտեղ՝ օգտվողին տեղեկացնելու համար՝ հիմնվելով formStatus-ի արժեքի վրա:

Դա անելու համար ավելացրեք հետևյալ կոդը հենց StyledForm բացվող պիտակի տակ:

{formStatus.success ? (
    <Alert severity="success">Form submitted successfully</Alert>
) : formStatus.error ? (
    <Alert severity="error">{formStatus.error}</Alert>
) : null}

Այժմ, օգտվողի մուտքագրումը գրավելու և վավերացնելու համար կարող եք օգտագործել Գրանցվել ֆունկցիան՝ գրանցելու ձևի մուտքագրման դաշտերը, հետևելու դրա արժեքներին և նշելու վավերացման կանոնները:

Այս ֆունկցիան վերցնում է մի քանի արգումենտ, ներառյալ մուտքագրման դաշտի անվանումը և վավերացման պարամետրերի օբյեկտը: Այս օբյեկտը սահմանում է մուտքագրման դաշտի վավերացման կանոնները, ինչպիսիք են հատուկ օրինակը և նվազագույն երկարությունը:

Շարունակեք և ներառեք հետևյալ կոդը որպես հենարան StyledTextField բաղադրիչում:

{...register('username', {
    required: 'Username required',
    pattern: {
        value: /^[a-zA-Z0-9_.-]*$/,
        message: 'Invalid characters used'
    },
    minLength: {
        value: 6,
        message: 'Username must be at least 6 characters'
    },
})}

Այժմ ավելացրեք հետևյալ օբյեկտը որպես հենարան գաղտնաբառ StyledTextField բաղադրիչում:

{...register('password', {
    required: 'Password required',
    minLength: {
        value: 8,
        message: 'Password must be at least 8 characters'
    },
})}

Ավելացրեք հետևյալ կոդը օգտանունի մուտքագրման դաշտի տակ՝ մուտքագրման պահանջների վերաբերյալ տեսողական արձագանք տալու համար:

Այս կոդը կգործարկի ծանուցում սխալի հաղորդագրությամբ՝ օգտատիրոջը տեղեկացնելու պահանջների մասին, ապահովելու համար, որ նրանք ուղղում են սխալները նախքան ձևը ներկայացնելը:

{errors.username && <Alert severity="error">{errors.username.message}</Alert>}

Վերջապես, ներառեք նմանատիպ կոդը հենց գաղտնաբառի մուտքագրման տեքստային դաշտի տակ.

{errors.password && <Alert severity="error">{errors.password.message}</Alert>}

Հիանալի! Այս փոփոխություններով դուք պետք է ունենաք տեսողականորեն գրավիչ, ֆունկցիոնալ ձև՝ պատրաստված React Hook Form-ով և Material UI-ով:

Բարելավեք ձեր Next.js-ի զարգացումը հաճախորդի կողմից օգտագործվող գրադարանների միջոցով

Material UI-ը և React Hook Form-ը հաճախորդի կողմի բազմաթիվ հիանալի գրադարանների ընդամենը երկու օրինակ են, որոնք կարող եք օգտագործել Next.js-ի ճակատային մասի զարգացումն արագացնելու համար:

Հաճախորդի կողմի գրադարաններն ապահովում են արտադրության համար պատրաստի մի շարք առանձնահատկություններ և նախապես կառուցված բաղադրիչներ, որոնք կարող են օգնել ձեզ ավելի արագ և արդյունավետ կերպով ստեղծել ավելի լավ առջևի հավելվածներ: