[인스타그램 클론코딩] 02. 회원 가입 구현(Front-End)

2023. 1. 31. 17:06·Web/인스타 클론 코딩

React 프로젝트의 폴더구조는 다음과 같다.

public
src
--components
--pages

 

1. components : 작성한 JS 모듈들을 모은 폴더이다.

2. pages : React 컴포넌트들을 모은 폴더이다.

 

1. 필요 모듈 설치

npm i react-router-dom axios

 

- 컴포넌트 전환에 필요한 react-router-dom, 그리고 ajax 대신 HTTP 요청을 도와줄 axios 모듈을 설치한다.

 

2. App.js 설정

import {BrowserRouter as Router, Route, Routes} from "react-router-dom";

const App = () => {
  return (
    <Router>
      <Routes>
        <Route path="/users" element={<UserContainer/>}>
            <Route path='sign-in' element={<SignIn/>}/>
            <Route path='sign-up' element={<SignUp/>}/>
        </Route>
      </Routes>
    </Router>
  );
}

export default App;

 

- BrpwerRouter 로 Component들을 감싸주고, 그 안에 url에 따라 변경될 컴포넌트들을 정의한다.

- /users로 시작되면 UserContainer 를 랜더링하게 되는데, 그 뒤에 sign-in이면 SignIn, sign-up이면 SignUp 컴포넌트를 추가적으로 랜더링하게 된다.

 

3. UserContainer.js 작성

const UserContainer = () => {
    return (
        <div className={style.user_container}>
            <Outlet/>
        </div>
    );
};

export default UserContainer;

 

- Outlet 부분은 앞서 설정한 /users 뒤에 오는 url에 따라 매핑되는 컴포넌트들이 랜더링 될 위치이다.

 

4. authAxios.js 작성

import axios from "axios";

const headers = {
    'Access-Control-Allow-Origin': '*',
}

const authAxios = axios.create({
    baseURL: '/api/users',
    headers: headers
});

authAxios.interceptors.response.use(
    (response) => {
        return response;
    },
    (error) => {
        return Promise.reject(error);
    }
);
export default authAxios;

- 로그인 및 회원가입에 사용될 axios 요청을 미리 custom 하여 작성해둔다.

- baseURL은 /api/users, header에는 access-control-allow-origin을 모두로 설정하여 넘겨주게 된다.

 

5. SignUp.js 작성

const SignUp = () => {
    const signup = [
        {name: 'email', type: 'text', placeholder: '이메일'},
        {name: 'password', type: 'password', placeholder: '비밀번호'},
        {name: 'name' ,type: 'text', placeholder: '성명'},
        {name: 'nickname' ,type: 'text', placeholder: '닉네임'},
        {name: 'phone' ,type: 'text', placeholder: '핸드폰번호'}
    ]

    const [inputs, setInputs] = useState({
        email: '',
        password: '',
        name: '',
        nickname: '',
        phone: ''
    })

    const onChange = (e) => {
        const {value, name} = e.target;
        setInputs({
            ...inputs,
            [name]: value
        });
    };

    const navigate = useNavigate();

    const onSubmit = () => {
        authAxios.post("/join", inputs)
            .then((res) => {
                alert(res.data);
                navigate("/users/sign-in");
            })
            .catch((err) => {
                alert(err.response.data);
            });
    };

    return (
        <>
            <div className={style.sign_input_container}>
                <div className={style.logo}>
                    OutStagram
                </div>
                {signup.map((component, idx) => {
                    return (<input key={idx} className={style.inputs} name={component.name} type={component.type} placeholder={component.placeholder} onChange={onChange}/>);
                })}
                <button className={style.buttons} onClick={onSubmit}>회원가입</button>
            </div>

            <div className={style.sign_nav_container}>
                <div>
                    계정이 있으신가요?
                </div>
                <div className={style.nav_link} onClick={() => navigate('/users/sign-in')}>
                    로그인
                </div>
            </div>
        </>
    );
};

export default SignUp;

 

- signup 배열에 있는 정보를  map 함수를 통하여 input 태그로 만들어 반복 랜더링한다. 여기서 onChange 메서드를 통하여 input들의 상태를 관리한다.

- useNavigate 메서드를 사용하여 url에 따른 Router 변경을 요청한다.

- authAxios를 사용하여 요청이 정상적으로 수행되면 요청결과를 alert한 뒤, login 페이지로 navigate하며, 에러가 발생했다면 에러 세부 메세지를 alert해준다.

저작자표시 비영리 변경금지 (새창열림)

'Web > 인스타 클론 코딩' 카테고리의 다른 글

[인스타그램 클론코딩] 04. JWT 필터 구현(Back-End)  (0) 2023.02.01
[인스타그램 클론코딩] 03. 로그인 구현(Front-End)  (0) 2023.02.01
[인스타그램 클론코딩] 03. 로그인 구현(Back-End)  (0) 2023.02.01
[인스타그램 클론코딩] 02. 회원 가입 구현(Back-End)  (0) 2023.01.31
[인스타그램 클론코딩] 01. 기술 스택 정하기  (0) 2023.01.31
'Web/인스타 클론 코딩' 카테고리의 다른 글
  • [인스타그램 클론코딩] 03. 로그인 구현(Front-End)
  • [인스타그램 클론코딩] 03. 로그인 구현(Back-End)
  • [인스타그램 클론코딩] 02. 회원 가입 구현(Back-End)
  • [인스타그램 클론코딩] 01. 기술 스택 정하기
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    Java
    스프링부트
    OpenAI API
    spring boot
    쿠버네티스
    mapstruct
    티스토리챌린지
    인스타그램
    Entity
    스프링 부트
    REST API
    클론코딩
    오블완
    클러스터
    백준
    리액트
    예외
    MSA
    chat GPT
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
[인스타그램 클론코딩] 02. 회원 가입 구현(Front-End)
상단으로

티스토리툴바