Ինչպես ստեղծել օգտագործողի համար հարմար ձևեր՝ օգտագործելով Chakra UI-ն React-ում
Չակրան ձեզ տալիս է պարզ բաղադրիչներ մաքուր, օգտագործելի ոճերով:
Հարմարեցված CSS-ով հավելվածների ոճավորումը զվարճալի է այնքան ժամանակ, քանի դեռ նախագիծը բարդանում է: Խնդիրը կայանում է նրանում, որ ոճավորումը և հետևողական դիզայնը պահպանվում է հավելվածի ողջ ընթացքում:
Թեև դուք դեռ կարող եք օգտագործել CSS-ը, հաճախ ավելի արդյունավետ է օգտագործել UI ոճավորող գրադարան, ինչպիսին է Chakra UI-ն: Այս գրադարանը տրամադրում է ձեր հավելվածները ձևավորելու արագ և առանց դժվարության եղանակ՝ օգտագործելով նախապես սահմանված UI բաղադրիչները և կոմունալ պարագաները:
Ինչպես սկսել Chakra UI-ով React Applications-ում
Chakra UI-ի հետ սկսելու համար առաջ գնացեք և տեղադրեք հիմնական React հավելվածը, օգտագործելով «create-react-app» հրամանը: Որպես այլընտրանք, դուք կարող եք օգտագործել Vite-ը React նախագիծ ստեղծելու համար:
Հաջորդը, տեղադրեք այս կախվածությունները.
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
Դուք կարող եք գտնել այս նախագծի կոդը նրա GitHub պահոցում:
Ավելացնել Չակրայի թեմաների մատակարար
Այս կախվածությունները տեղադրելուց հետո դուք պետք է փաթեթավորեք հավելվածը ChakraProvider-ով: Դուք կարող եք մատակարարին ավելացնել կամ ձեր index.jsx, main.jsx կամ App.jsx այսպես.
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import { ChakraProvider } from '@chakra-ui/react'
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<ChakraProvider>
<App />
</ChakraProvider>
</React.StrictMode>,
)
Հավելվածը ChakraProvider-ով փաթաթելը անհրաժեշտ է՝ ձեր հավելվածում Chakra UI-ի բաղադրիչներին և ոճային հատկություններին մուտք գործելու համար:
Փոխարկել տարբեր թեմաներ
Chakra UI-ն ապահովում է լռելյայն նախապես կառուցված թեմա, որը ներառում է լույսի, մութ և համակարգի գունային ռեժիմների աջակցություն: Այնուամենայնիվ, դուք կարող եք հետագայում հարմարեցնել ձեր հավելվածի UI-ի թեմաները և ոճի այլ հատկությունները թեմայի օբյեկտում, ինչպես նշված է Չակրայի փաստաթղթերում:
Մուգ և բաց թեմաները փոխարկելու համար ստեղծեք components/ThemeToggler.jsx ֆայլ src գրացուցակում և ներառեք հետևյալ կոդը:
import React from 'react'
import { useColorMode, Box, IconButton} from '@chakra-ui/react';
import { SunIcon, MoonIcon } from '@chakra-ui/icons'
export default function ThemeToggler() {
const { colorMode, toggleColorMode } = useColorMode();
return (
<Box textAlign="center" py={4} >
<IconButton
icon={colorMode === 'light' ? <MoonIcon /> : <SunIcon />}
onClick={toggleColorMode}
variant="ghost"
/>
<h2>Toggle Theme</h2>
</Box>
);
}
Այժմ, առաջ գնացեք և ներմուծեք պատկերակների փաթեթը.
npm i @chakra-ui/icons
ThemeToggler բաղադրիչը կարտադրի կոճակ, որը թույլ է տալիս օգտատերերին անցնել հավելվածի թեթև և մուգ թեմաների միջև:
Այս բաղադրիչը մուտք է գործում ընթացիկ գունային ռեժիմ՝ useColorMode կեռիկը և օգտագործում է toggleColorMode ֆունկցիան՝ ռեժիմների միջև անցնելու համար:
IconButton բաղադրիչը վերցնում է պատկերակի առանձնահատկությունները՝ միաժամանակ ունենալով կոճակի սեղմման հնարավորությունները:
Ստեղծեք մուտքի ձևի միջերես
Ստեղծեք նոր Login.jsx ֆայլ components գրացուցակում և դրան ավելացրեք հետևյալ կոդը.
Նախ, ավելացրեք այս ներմուծումները:
import React, { useState } from 'react';
import {
Box,
Button,
Card,
CardBody,
Center,
Flex,
FormControl,
FormLabel,
Heading,
HStack,
Input,
Stack,
VStack,
useColorMode,
} from '@chakra-ui/react';
Այս UI բաղադրիչները ներմուծելուց հետո սահմանեք React ֆունկցիոնալ բաղադրիչը և հիմնական կոնտեյների բաղադրիչները, որոնք կպահեն մուտքի օգտատիրոջ միջերեսի բոլոր տարրերը:
function Login() {
const { colorMode } = useColorMode();
return (
<Box>
<Flex justify="center" align="center" height="80vh" >
<Center>
<Stack>
</Stack>
</Center>
</Flex>
</Box>
);
}
export default Login;
Box բաղադրիչը ներկայացնում է div տարր՝ այն ծառայում է որպես հիմնական շինարարական բլոկ, որի վերևում դուք կառուցում եք Chakra-ի բոլոր մյուս բաղադրիչները: Մյուս կողմից, Flex-ը Box բաղադրիչ է, որի ցուցադրման հատկությունը սահմանված է flex: Սա նշանակում է, որ դուք կարող եք օգտագործել ճկուն հատկությունները բաղադրիչը ոճավորելու համար:
Ե՛վ Կենտրոնը, և՛ Stack բաղադրիչները դասավորության բաղադրիչներ են, այնուամենայնիվ, դրանք ունեն աննշան տարբերություններ ֆունկցիոնալության մեջ: Կենտրոնական բաղադրիչը պատասխանատու է բոլոր մանկական բաղադրիչները իր կենտրոնում հավասարեցնելու համար, մինչդեռ Stack-ը միավորում է UI տարրերը և ավելացնում նրանց միջև հեռավորությունը:
Հիմա եկեք կառուցենք ձևի վերնագրի բաժինը: Header բաղադրիչը իսկապես օգտակար կլինի այս մասի համար: Stack բաղադրիչի ներսում ավելացրեք այս կոդը:
<VStack spacing='6'>
<Heading
fontWeight='500'
fontSize='30px'
letterSpacing='-0.5px'
>
Login
</Heading>
</VStack>
VStack բաղադրիչն իր երեխայի տարրերը կուտակում է ուղղահայաց ուղղությամբ: Հաջորդը, ստեղծեք քարտի բաղադրիչը, որը կտեղավորի մուտքի ձևը և դրա տարրերը:
<Card bg='#f6f8fa' variant='outline' borderColor='#d8dee4' w='308px'
size="lg" borderRadius={8} boxShadow="lg"
>
<CardBody>
<form>
<Stack spacing='4'>
<FormControl isRequired>
<FormLabel size='sm'
color={colorMode === 'dark' ? 'black' : 'black'}
>Email Address</FormLabel>
<Input
type='text'
bg='white'
borderColor='#d8dee4'
size='sm'
borderRadius='6px'
color={colorMode === 'dark' ? 'black' : 'black'}
value={email}
/>
</FormControl>
<FormControl isRequired>
<HStack justify='space-between'>
<FormLabel size='sm'
color={colorMode === 'dark' ? 'black' : 'black'}
>Password</FormLabel>
<Button
as='a'
href='#'
variant='link'
size='xs'
color='#0969da'
fontWeight='500'
>
Forgot password?
</Button>
</HStack>
<Input
type='password'
bg='white'
borderColor='#d8dee4'
size='sm'
borderRadius='6px'
color={colorMode === 'dark' ? 'black' : 'black'}
value={password}
/>
</FormControl>
<Button
type="submit"
bg='#2da44e'
color='white'
size='sm'
_hover={{ bg: '#2c974b' }}
_active={{ bg: '#298e46' }}
>
Sign in
</Button>
</Stack>
</form>
</CardBody>
</Card>
Շարունակեք և թարմացրեք ձեր App.jsx ֆայլը՝ մուտք գործելու, ինչպես նաև ThemeToggler բաղադրիչը ներմուծելու համար:
import React from 'react'
import Login from './components/login'
import ThemeToggler from './components/ThemeToggler'
export default function App() {
return (
<div>
<ThemeToggler />
<Login />
</div>
)
}
Հիանալի Փոփոխությունները թարմացնելու համար գործարկեք զարգացման սերվերը:
npm run dev
Այժմ, երբ էջը բեռնվի բրաուզերում, այն սկզբում կցուցադրի լռելյայն լուսային ռեժիմի թեման:
Այժմ սեղմեք Փոխարկել թեման պատկերակի կոճակը՝ թեմայի ռեժիմը փոխելու համար:
Form State-ի կառավարում React Hooks-ի միջոցով
Այս պահին մուտքի ձևը պարունակում է միայն երկու մուտքագրման դաշտ և մուտքի կոճակ: Այն գործունակ դարձնելու համար եկեք սկսենք իրականացնել պետական կառավարման տրամաբանություն՝ օգտագործելով React hooks:
Սահմանեք հետևյալ վիճակները Login ֆունկցիոնալ բաղադրիչի ներսում.
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [success, setSuccess] = useState('');
const [error, setError] = useState('');
const [isLoading, setIsLoading] = useState(false);
const [isLoggedIn, setIsLoggedIn] = useState(false);
Այնուհետև ավելացրեք onChange handler ֆունկցիան, որը կլսի փոփոխությունները մուտքագրման դաշտերում, կգրանցի մուտքերը և համապատասխանաբար կթարմացնի էլփոստի և գաղտնաբառի վիճակները:
Ավելացրեք այս կոդի հայտարարությունները մուտքագրման դաշտերում:
onChange={(e)=> { setEmail(e.target.value)}}
onChange={(e)=> { setPassword(e.target.value)}}
Այս փոփոխություններով դուք այժմ գրանցում եք օգտվողի մուտքերը:
Ձևաթղթերի վավերացում և սխալների մշակում Chakra UI-ի ներկառուցված հատկանիշներով
Այժմ ավելացրեք կարգավորիչի գործառույթ, որը կմշակի մուտքերը և կվերադարձնի համապատասխան արդյունքներ: form տարրի բացման պիտակի վրա ավելացրեք onSubmit մշակիչ գործառույթը հետևյալ կերպ:
<form onSubmit={handleSubmit}>
Հաջորդը, սահմանեք handleSubmit ֆունկցիան: Ձեր սահմանած վիճակներից անմիջապես ներքևում ներառեք հետևյալ կոդը.
const handleSubmit = async event => {
event.preventDefault();
setIsLoading(true);
try {
await userLogin({ email, password });
setSuccess('Logged in successfully!');
setIsLoading(false);
setIsLoggedIn(true);
} catch (error) {
setError('Invalid username or password!');
setIsLoading(false);
setEmail('');
setPassword('');
}
};
Այս ասինխրոն handleSubmit ֆունկցիան կգործարկվի, երբ ինչ-որ մեկը ներկայացնի ձևը: Ֆունկցիան սահմանում է բեռնման վիճակը true-ի նմանակելով մշակման գործողությունը: Դուք կարող եք մատուցել Chakra UI-ի բեռնման մանողը՝ օգտատիրոջը տեսողական ազդանշան տրամադրելու համար:
Ավելին, handleSubmit ֆունկցիան կկանչի userLogin ֆունկցիան, որն ընդունում է էլփոստը և գաղտնաբառը որպես պարամետրեր՝ դրանք վավերացնելու համար:
Մոդելավորել նույնականացման API հարցումը
Ստուգելու համար, որ օգտատիրոջ կողմից տրամադրված մուտքերը վավեր են, դուք կարող եք մոդելավորել API-ի զանգը՝ սահմանելով userLogin ֆունկցիան, որը կստուգի մուտքի հավատարմագրերը, ինչպես կստուգեր հետին պլանի API-ն:
Հենց handleSubmit ֆունկցիայի տակ ավելացրեք այս կոդը.
const userLogin = async ({ email, password }) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (email === 'test@email.com' && password === 'password') {
resolve();
} else {
reject();
}
}, 1000);
});
};
Այս կոդը սահմանում է ասինխրոն ֆունկցիա, որն իրականացնում է պարզ տրամաբանական վավերացման տրամաբանություն:
Չակրայի UI-ի առանձնահատկությունների հետ կապված սխալները:
Դուք կարող եք համապատասխան տեսողական արձագանք տրամադրել օգտատերերին՝ հիմնվելով ձևի վրա նրանց փոխազդեցությունների վրա՝ օգտագործելով Չակրայի հետադարձ կապի բաղադրիչները: Դա անելու համար սկսեք ներմուծել այս բաղադրիչները Chakra-ի UI գրադարանից:
Alert, AlertIcon, AlertTitle, CircularProgress
Այժմ ավելացրեք հետևյալ կոդը հենց ձևի տարրի բացման պիտակի տակ:
{error && !isLoggedIn &&
<Alert status='error' variant='solid'>
<AlertIcon />
<AlertTitle>{error}</AlertTitle>
</Alert>
}
{isLoggedIn && (
<Alert status="success" variant='solid'>
<AlertIcon />
<AlertTitle>{success}</AlertTitle>
</Alert>
)}
Վերջապես, այս թարմացումը դարձրեք «ներկայացնել» կոճակը՝ ներառելու բեռնման մանողը՝ CircularProgress, բաղադրիչը:
{isLoading
? (<CircularProgress isIndeterminate size="24px" color="teal" />)
: ('Sign In')}
Ահա թե ինչ կտեսնի օգտվողը, երբ նրանք հաջողությամբ մուտք գործեն.
Եթե մուտքի գործընթացում սխալ կա, նրանք պետք է տեսնեն այսպիսի պատասխան.
Բարելավեք ձեր զարգացման գործընթացը Chakra UI-ով
Chakra UI-ն ապահովում է լավ մշակված և հարմարեցված UI բաղադրիչների մի շարք, որոնք դուք կարող եք օգտագործել՝ արագորեն ստեղծելու React UI-ներ: Անկախ նրանից, թե որքան պարզ կամ բարդ են ձեր դիզայնը, Չակրան ունի բաղադրիչներ UI-ի գրեթե բոլոր առաջադրանքների համար: