Input.jsx
const Input = ({ type, value, onChange, placeholder, className, id, name }) => {
return (
<input
type={type}
value={value}
onChange={onChange}
placeholder={placeholder}
className={className}
id={id}
name={name}
/>
);
};
export default Input;
Label.jsx
const Label = ({ htmlFor, children, className }) => {
return (
<label htmlFor={htmlFor} className={className}>
{children}
</label>
);
};
export default Label;
Button.jsx
const Button = ({ onClick, chlidren }) => {
return (
<button
onClick={(e) => {
e.preventDefault();
onClick();
}}
>
{chlidren}
</button>
);
};
export default Button;
Container.jsx
import "../../styles/atoms/Container.css";
const Container = ({ children, className }) => {
return <div className={`container ${className}`}>{children}</div>;
};
export default Container;
Box.jsx
import "../../styles/atoms/Box.css";
const Box = ({ className = "", children }) => {
return <div className={`box ${className}`}>{children}</div>;
};
export default Box;
molecules/InputGroup.jsx
import Input from "../atoms/Input";
import Box from "../atoms/Box";
import Label from "../atoms/Label";
const InputGroup = ({ id, type, name, value, onChange, className, label }) => {
return (
<Box className={className}>
<Label htmlFor={id}>{label}</Label>
<Input
id={id}
name={name}
type={type}
value={value}
onChange={onChange}
/>
</Box>
);
};
export default InputGroup;
organisms/RegisterForm.jsx
import Container from "../atoms/Container";
import InputGroup from "../molecules/InputGroup";
import Button from "../atoms/Button";
import useInput from "../../hooks/useInput";
import { register } from "../../services/api.js";
import { useEffect } from "react";
const RegisterForm = () => {
const { value, handleOnChange } = useInput({
username: "",
email: "",
password: "",
passwordConfirm: "",
});
return (
<Container>
<InputGroup
id="username"
type="text"
placeholder="사용자 이름을 입력해주세요"
label="이름"
name="username"
value={value.username}
onChange={handleOnChange}
/>
<InputGroup
id="email"
type="email"
placeholder="이메일을 입력해주세요"
label="이메일"
name="email"
value={value.email}
onChange={handleOnChange}
/>
<InputGroup
id="password"
type="password"
name="password"
placeholder="********"
label="비밀번호"
value={value.password}
onChange={handleOnChange}
/>
<InputGroup
id="passwordConfirm"
type="password"
name="passwordConfirm"
placeholder="********"
label="비밀번호 확인"
value={value.passwordConfirm}
onChange={handleOnChange}
/>
<Button
onClick={() => {
register({
email: value.email,
password: value.password,
username: value.username,
});
}}
>
회원가입
</Button>
</Container>
);
};
export default RegisterForm;
pages/RegisterPage.jsx
import RegisterForm from "../components/organisms/RegisterForm";
const RegisterPage = () => {
return <RegisterForm />;
};
export default RegisterPage;