Создание формы регистрации с использованием стилизованных компонентов в React может стать отличным способом добавить в ваше приложение нестандартный стиль. В этом сообщении блога мы рассмотрим шаги по созданию простой формы регистрации с использованием стилизованных компонентов.
Во-первых, давайте создадим новый проект React с помощью команды create-react-app
:
npx create-react-app my-sign-up-form
Далее давайте установим пакет styled-components
, который мы будем использовать для создания наших стилизованных компонентов:
npm install styled-components
Теперь, когда у нас есть все необходимое, давайте создадим форму регистрации. Мы начнем с создания нового компонента SignUpForm
. Этот компонент будет компонентом с отслеживанием состояния, который будет хранить данные для наших полей формы, а также обрабатывать любую проверку и отправку формы.
import React from 'react'; import styled from 'styled-components'; import { StyledForm, StyledInput, StyledButton, StyledAlert, StyledLabel } from './FormComponents'; function LoginForm() { const [username, setUsername] = React.useState(''); const [password, setPassword] = React.useState(''); const [passwordInvalid, setPasswordInvalid] = React.useState(false); const [enabled, setEnabled] = React.useState(false); const handleSubmit = (e) => { e.preventDefault(); // validate password and set passwordInvalid state accordingly if (password.length < 8) { setPasswordInvalid(true); } else { setPasswordInvalid(false); } } const usernameEntered = (e) => { setUsername(e.target.value); // buttonEnabled(username, password) } const passwordEntered = (e) => { setPassword(e.target.value); // buttonEnabled(username, password) } const buttonEnabled = (username, password) => { if(username.length > 0 && password.length > 0) { setEnabled(true); } else { setEnabled(false); } } return ( <StyledForm onSubmit={handleSubmit}> <StyledLabel>Username:</StyledLabel> <StyledInput type="text" value={username} onChange={e => usernameEntered(e)}/> <StyledLabel invalid={passwordInvalid}>Password:</StyledLabel> <StyledInput type="password" value={password} onChange={(e) => passwordEntered(e)} /> {passwordInvalid && <StyledAlert>Password is invalid.</StyledAlert>} <StyledButton type="submit" disabled={!username || !password}>Login</StyledButton> </StyledForm> ) } export default LoginForm; import styled from "styled-components"; export const StyledForm = styled.form` background-color: #f4f4f4; padding: 20px; border-radius: 5px; ` export const StyledLabel = styled.label` display: block; margin-bottom: 5px; font-weight: bold; color: ${props => props.invalid ? 'red' : 'black'}; ` export const StyledInput = styled.input` width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 5px; ` export const StyledButton = styled.button` background-color: #4caf50; color: white; padding: 10px; margin-top: 10px; border: none; border-radius: 5px; cursor: pointer; &:disabled { opacity: 0.5; } &:enabled { opacity: 1.0; } opacity: ${props => !props.enabled ? 0.5 : 1}; ` export const StyledAlert = styled.div` padding: 10px; background-color: #f44336; color: white; margin-top: 10px; border-radius: 5px; `