Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • javascript
  • react
  • 알고리즘
  • 백준
  • typescript
  • 코딩테스트
  • Git
  • Object
  • 자바스크립트
  • Error
  • 코칭스터디
  • 리액트
  • 프로그래머스
  • 기초
  • react-native
  • 회고
  • vite
  • ReactNative

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[React] 소셜웹페이지 - 자바스크립트 ➡️ 리액트 변환
Programing/React

[React] 소셜웹페이지 - 자바스크립트 ➡️ 리액트 변환

2022. 8. 17. 01:06

자바스크립트로 구현해놓은 페이지를 리엑트로 옮겨 똑같이 기능하도록 만들어보았다.

 

react-router-dom

npm install react-router-dom --save

리액트는 싱글 페이지 어플리케이션(SPA)이다. 즉, 리액트 프로젝트는 index.html으로 하나의 HTML을 사용하며 한 개의 웹에서 여러 개의 페이지를 보여주는 방법에는 라우팅이 있다.

 

라우팅이란 url 주소에 따라 다른 화면을 보여주는 것이다. 리액트에 내장된 기능이 없으므로 이런 써드파티 라이브러리를 설치해 사용해야 한다.

import { BrowserRouter, Routes, Route } from "react-router-dom";
// 컴포넌트로 사용하기 위해 import 해준다.

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path='/' element={<Login />} />
        <Route path="/findpw" element={<Findpw />} />
        <Route path="/main" element={<Main />} />
      </Routes>
    </BrowserRouter>
  );
}

리액트 앱이 'http://localhost:3000/' 에 열려있기 때문에, path에 맞는 주소를 넣어주면 그 컴포넌트로 이동한다.

import { Link } from "react-router-dom";

<Link to="/findpw">
  비밀번호를 잊으셨나요?
</Link>

라우터를 사용할 수 있기 때문에 <Link>컴포넌트를 사용해 내부 경로로 연결할 수 있다. 외부 링크의 경우 <a> 태그를 사용해야 한다. Link컴포넌트 사용 시 to=''에 경로를 지정해주는 것은 필수이기 때문에, Link 컴포넌트를 쓰고 to=''를 사용하지 않으면 오류가 발생한다.

 

Sass

npm install sass --save

리액트에 옮겨오면서 scss로 css를 작성했다. 상속관계가 훨씬 깔끔하게 나타나고, 클래스를 훨씬 덜만들게 되어서 깔끔하게 정리할 수 있었다.

 

리액트는 랜더링되면서 파일이 합쳐져 클래스명이 겹치면 다른 컴포넌트에도 css가 적용되는 문제가 생길 수 있어 module.scss로 파일을 생성했다. 

opasity

로그인 입력창에서 아이디에 @가 들어가 있다거나, 비밀번호가 5자리 입력되어있을 때 로그인 버튼을 활성화하도록 구현했었다. 바닐라 JS로 만들 때는 버튼 활성화 여부에 따라 색 값 자체를 다르게 줬었는데 이번에 불투명도로 조절하는 방법을 알게 됐다.

  const changeDisabled = () => {   
    if (idValue.includes("@") && pwValue.length >= 5) {
      setDisabled(false);
      setOpasity(1);
    } else {
      setDisabled(true);
      setOpasity(0.5);
    }
  }
  
  ///////////////////
    <button
    disabled={disabled}
    style={{
      opacity: opacity,
    }}
  >
    로그인
  </button>

opacity(0.5)
opacity(1)

+) 버튼의 비활성화, 불투명도 변경이 일어나는데 입력값을 한칸씩 늦게 입력되는 오류가 있었다. 즉 아이디는 '@' 입력 후 다른 입력 하나가 더있어야 했고, 비밀번호도 6자리에서 활성화되었다.

  const [idValue, setIdValue] = useState('');
  const [pwValue, setPwValue] = useState('');
  const [isValid, setIsValid] = useState(false);

  const handleIdInput = (e) => {
    let id = e.target.value
    setIdValue(id);
    id.includes("@") && pwValue.length >= 5
      ? setIsValid(true)
      : setIsValid(false)
  };
  const handlePwInput = (e) => {
    let pw = e.target.value
    setPwValue(pw);
    idValue.includes("@") && pw.length >= 5
      ? setIsValid(true)
      : setIsValid(false);
  };

ID와 PW의 입력을 onChange를 통해 매 입력마다 검증하도록 해서 해결했다.

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

'Programing > React' 카테고리의 다른 글

[React] 소셜웹페이지 - 서버 통신 & 로그인  (0) 2022.08.27
[React] 댓글 입력 오류  (0) 2022.08.19
[React] css 모듈과 proptype  (0) 2022.07.29
[React] JSX  (0) 2022.07.05
[React] 시작하기  (0) 2022.07.05
    'Programing/React' 카테고리의 다른 글
    • [React] 소셜웹페이지 - 서버 통신 & 로그인
    • [React] 댓글 입력 오류
    • [React] css 모듈과 proptype
    • [React] JSX
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바