MUI라고도 하는 머티리얼 UI는 구글의 머티리얼 디자인 프레임워크의 구현을 포괄하는 요소 모음으로 높이 평가받고 있습니다. 이 포괄적인 조립식 사용자 인터페이스 컴포넌트 세트는 실용적이고 미학적으로 만족스러운 인터페이스를 쉽게 구축할 수 있는 다양한 옵션을 제공합니다.
원래는 React와 함께 사용하기 위한 것이지만, 이 툴셋은 Next.js와 같은 광범위한 React 에코시스템 내에 존재하는 추가 프레임워크를 통합하도록 확장될 수 있습니다.
React Hook 폼 및 머티리얼 UI 시작하기
React Hook 폼 는 폼을 생성, 관리, 검증하는 간단하고 선언적인 방법을 제공하는 인기 있는 라이브러리입니다.
Material UI의 UI 컴포넌트 및 스타일을 통합하여 사용하기 쉬운 멋진 양식을 만들고 Next.js 애플리케이션에 일관된 디자인을 적용할 수 있습니다.
프로세스를 시작하려면 App 디렉터리를 활용하는 스캐폴딩 기법을 사용하여 Next.js 프로젝트의 로컬 인스턴스를 만들어야 합니다. 명확성과 이해를 돕기 위해 데모에서는 가장 최신 버전의 Next.js를 사용합니다.
npx create-next-app@latest next-project --app
Rasa 설치를 설정하고 새 프로젝트를 생성한 후에는 해당 프로젝트 내에 추가 라이브러리를 통합해야 합니다. 이렇게 하려면 프로젝트가 있는 디렉토리로 이동하여 `pip install
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과 Material-UI의 기능을 활용하려면 다음과 같이 임포트해야 합니다: ”’자바스크립트 ‘react-hook-form’에서 { useForm }을 임포트합니다; ‘@material-ui/core’에서 { TextField, Button, Container, Box }를 가져옵니다;
"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)는 미리 구성된 사용자 인터페이스 요소 배열을 제공하며, 스타일 프로퍼티를 적용하여 특정 기본 설정에 맞게 조정할 수 있습니다.
스타일 접근 방식을 활용하면 사용자 인터페이스 측면을 더 많이 사용자 정의하고 조작할 수 있지만, 기본 둘러싸기, 양식 자체 및 개별 텍스트 입력 필드와 같은 양식의 주요 구성 요소의 모양을 향상하기 위해 CSS 속성을 사용할 수도 있습니다.
Python 스크립트의 가져오기 문 아래에 다음 코드 줄을 포함해야 합니다:
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>
</>
);
}
기본 Next.js 코드를 삭제하고 후속 콘텐츠로 대체하여 애플리케이션의 page.js 파일 내에 앞서 언급한 요소를 통합합니다:
import Form from 'src/components/Form'
export default function Home() {
return (
<main >
<Form />
</main>
)
}
적절한 인터페이스 또는 명령줄 도구를 활용하여 개발 서버 생성 프로세스를 시작하면 선호하는 웹 브라우징 애플리케이션 내에 두 개의 텍스트 기반 입력 필드와 ‘제출’ 작업 버튼이 포함된 기본 사용자 인터페이스가 생성됩니다.
양식 유효성 검사 처리
레이아웃의 미학은 인상적이지만 이 시점에서는 기능이 부족합니다. 제대로 작동하려면 유효성 검사 로직을 통합해야 합니다.사용자 입력 데이터를 처리하고 검증할 때 ‘useForm’ 훅을 활용하면 유리할 수 있습니다.
다음은 React 함수형 컴포넌트에서 상태 변수를 정의하고 사용하는 방법에 대한 예시입니다: ”’자바스크립트 ‘react’에서 { useState }를 가져옵니다; 함수 MyForm() { const [formStatus, setFormStatus] = useState(‘initial’); // 기본값으로 상태 초기화 const handleLogin = (username, password) => { // 사용자 이름과 비밀번호가 유효한지 확인합니다. // 유효하다면 양식 상태를 “제출됨”으로 업데이트합니다. // 그렇지 않으면 “초기”로 유지 setFormStatus(‘submitted’); }; 반환 (
const [formStatus, setFormStatus] = useState({ success: false, error: '' });
사용자 자격 증명을 확인하는 메커니즘을 구현하기 위해 프론트엔드 애플리케이션과 백엔드 인증 서비스 간의 상호 작용 중에 일반적으로 발생하는 HTTP API 호출을 에뮬레이트하는 `validateCredentials` 함수를 개발해야 합니다.
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 애플리케이션 내에 추가 페이지가 있는 경우 사용자를 다른 웹페이지로 이동시킬 수 있습니다.
머티리얼 UI는 웹 개발 프로젝트에서 고품질 컴포넌트와 기능을 제공하기 위한 훌륭한 라이브러리입니다. Material UI가 제공하는 기능 중 하나는 피드백 컴포넌트로, React의 조건부 렌더링 기법과 함께 활용하면 formStatus의 값에 따라 사용자에게 정보를 전달할 수 있습니다. 이를 통해 개발자는 제출 과정에서 사용자와 효과적으로 소통할 수 있는 인터랙티브 인터페이스를 만들 수 있습니다.
양식에 더 세련된 모양을 만들기 위해 ‘StyleForm’ 컴포넌트의 닫는 중괄호 바로 뒤에 제공된 코드를 추가하여 추가 CSS 스타일링을 통합할 수 있습니다. 이렇게 하면 브랜드의 시각적 아이덴티티에 따라 양식이 세련되고 전문적인 모양을 유지할 수 있습니다.
{formStatus.success ? (
<Alert severity="success">Form submitted successfully</Alert>
) : formStatus.error ? (
<Alert severity="error">{formStatus.error}</Alert>
) : null}
사용자 입력을 수집하고 확인하기 위해 ‘등록’ 메서드를 사용하여 양식 필드 구성 요소를 등록하고 상태를 모니터링하며 유효성 검사 기준을 정의할 수 있습니다.
주어진 함수에는 입력 필드의 식별자와 “유효성 검사 매개변수”로 알려진 입력의 유효성을 검사하기 위한 일련의 기준이 포함된 여러 입력이 필요합니다. 후자는 지정된 입력 필드에서 준수해야 하는 특정 패턴과 최소값을 포함합니다.
다음은 제공된 코드를 `UsernameStyledTextField` 컴포넌트에 소품으로 포함시키는 방법에 대한 예시입니다: ”’자바스크립트 ‘에서 React를 가져옵니다; // import { TextFieldProps } from ‘@material-ui/core’; // 아래 유형을 파괴하는 데만 사용하므로 TextFieldProps를 가져올 필요는 없습니다. 유형 UsernameStyledTextFieldProps = { label: 문자열; 값: 문자열 | null; onChangeText: (text: 문자열) => void; } & TextFieldProps; const UsernameStyledTextField = ({ label, value, onChangeText }: UsernameStyledTextFieldProps) => { const handleUserInput = () => { if (!value) return
{...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'
},
})}
비밀번호 스타일 텍스트 필드 컴포넌트 내에서 지정된 객체를 프로퍼티로 통합하려면 React 네이티브 컴포넌트의 “props” 속성을 활용하고 원하는 값에 할당할 수 있습니다. 예를 들어 객체의 이름이 “myObject”인 경우 코드는 다음과 같습니다: “`php
{...register('password', {
required: 'Password required',
minLength: {
value: 8,
message: 'Password must be at least 8 characters'
},
})}
사용자 경험을 향상시키고 원하는 입력 형식을 명확하게 전달하려면 사용자 이름 필드 아래에 필요한 문자, 길이 및 기타 사용자 이름 관련 사양에 대해 사용자에게 시각적으로 매력적이고 간결한 지침을 제공하는 문장을 한두 개 추가하는 것이 좋습니다. 이는 적절한 HTML 태그를 통합하고 텍스트를 매력적인 방식으로 스타일링하여 달성할 수 있습니다.
이 스크립트의 목적은 양식을 성공적으로 제출하는 데 필요한 전제 조건을 강조하는 설명 메시지가 포함된 알림을 생성하는 것입니다. 이는 사용자가 양식을 완성하고 전송하기 전에 입력 내용에 불일치가 있는 경우 수정하라는 메시지를 표시하는 수단으로 사용됩니다.
{errors.username && <Alert severity="error">{errors.username.message}</Alert>}
비밀번호 입력 필드 아래에 ‘제출’ 버튼이 있는 레이블 요소를 하위 요소로 추가하여 양식을 제출합니다. 또한 이메일 및 비밀번호 레이블 모두에 ID 속성을 추가하여 필요한 경우 JavaScript에서 타깃팅할 수 있도록 합니다. 코드를 해결하는 방법은 다음과 같습니다: “`php