[React] 개념 정리 (2)

김현성·2022년 1월 16일
0

React

목록 보기
5/5

이번엔 쇼핑몰 만들기 실습 하면서 배운 개념 정리 ~!



📍 yarn 이란 ?

  • npm 대신 쓸 수 있는 명령어 같은 걸 제공하는 일종의 sw임.
  • npm, npx보다 훨씬 빠른 설치 환경 제공.




📍 Bootstrap 이란 ?

  • html, css를 직접 짜지 않아도 웹 UI들을 쉽게 만들어 낼 수 있는 라이브러리.



📍 import / export

  • export) 어떤 특정한 파일을 다른 파일에서 쓸 수 있게 내보내는 문법.
    export default 변수명/함수명
  • import) export로 내보내진 파일을 가져오는 문법.
    import 변수명 from 경로
    - if 내보낼 변수가 많다면 ? ) export는 한 파일 내에서 한번만 쓸 수 있으므로 { } 로 엮어서 내보내면 됨 !
    export { 변수1, 변수2 }



📍 서버에서 받아온 데이터를 왜 굳이 반복문 돌려서 뿌리는지 ?

  • 우리가 뿌릴 데이터가 3개인 걸 '미리' 알고 있으면 3번 손수 복붙해도 OK
  • 근데 갑자기 데이터가 4개 날아오면 .. ? 대처할 수 없음.
  • 그래서 반복문 이용하는게 훨씬 유용하다 !



📍 라우팅이란 ?

  • 페이지를 여러 개 만들자는 것.
  • ex) 쇼핑몰 같은 경우엔 주문 확인 페이지, 상세 페이지 등이 있음.
  • react-router-dom 라이브러리 이용!
    npm install react-router-dom@5 명령어 입력.

👉 BrowserRouter vs HashRouter )

  • HashRouter는 라우팅을 조금 더 안전하게 할 수 있음.
    사이트 주소 뒤에 #이 붙는데, # 뒤에 적는 것은 서버로 전달이 되지 않기 때문.
  • BrowserRouter는 # 기호 없이 동작.
    그래서 라우팅을 리액트가 아니라 서버에게 요청할 수도 있어서 위험.
    (서버가 "어라 그런 페이지 없는데요?" 할 수 있으므로 서버에서 서버 라우팅 방지하는 API 작성이 필요.)



📍 React Router 특징

  • 페이지마다 다른 HTML 파일이 아니다.
  • html은 index.html 하나만 있음. 근데 url을 입력하면 안에 있는 html 내용물을 바꿔주세요. 라고 페이지 이동을 흉내내고 있을 뿐 !



📍 URL 파라미터 문법

  • /detail/:id : 아무 문자나 받겠다는 URL 작명법
  1. 콜론 뒤에 맘대로 작명
  2. 여러 개 사용 가능 (/detail/:id/:id2)



📍 styled-components

  • 컴포넌트를 많이 만들다 보면 css를 짜기 난감한 경우들이 있음.
  • 컴포넌트가 매우 많고 다양한 파일에 분리되어 있는 경우 한군데 다 몰아넣으면 난감해짐.
  • 클래스 명을 실수로 중복으로 만들어놓기도 하는 등의 실수들을 방지하기 위함.
  • CSS in JS 라고도 함.



📍 SASS

  • css를 조금 더 프로그래밍 언어스럽게 작성가능한 전처리기
  • css에서 변수, 연산자, 함수, extend, import 이런 것들 사용 가능.
  • 브라우저는 SASS 문법 모르기 때문에, 다시 css로 컴파일 해주는 라이브러리가 필요한데 node-sass 설치하면 알아서 해줌 ~ (npm install node-sass)
  1. 변수에 데이터를 저장해서 쓰자.
    if) 자주 사용하는 색상이 있다면, $메인컬러: #ff0000 이런식으로 변수에 저장해놓고 css 내에서 $메인컬러 로 사용 가능.
  2. @import 파일경로를 이용해서 모든 속성에 필요한 공통적인 css의 경우 import해서 사용 가능.
  3. nesting
    비슷한 셀렉터가 많거나, 셀렉터가 길어지는 경우에 유용하게 사용.
    ex) 아 h4, p가 div.container와 관련 있는 속성들이구나.
div.container {
  h4 {
    color : blue;
  }
  p {
    color: green;
  }
}
  • 어떤 요소의 css 코드를 다른 요소에서도 사용하려면, @extend 클래스명을 { }안에 해주면 복사 붙여넣기 처럼 사용 가능 !
    그 여러 줄의 css 코드를 다시 작성하지 않아도 되며, 변경 혹은 추가하고 싶은 요소만 다시 작성해주면 됨.
  • @mixin 함수명 은 긴 css 코드들을 함수로 만들어 사용할 수 있도록 함.
    사용하는 곳에서는 @include 함수명을 { } 안에 입력해주면 해당 함수에 있는 css 코드들이 적용됨.



📍 컴포넌트 Lifecycle & Hook
컴포넌트는
1. 생성이 될 수도 있고
2. 삭제가 될 수도 있고
3. 관련된 state가 변경되면 재렌더링(업데이트)이 일어날 수도 있음.

  • 우리는 그 라이프 사이클 중간 중간에 hook을 걸 수 있는데, 이를 통해 뭔가 명령을 줄 수 있음. ex) Detail 컴포넌트 등장 전에 이것 좀 해주세요.
  • 그래서 Hook의 정확한 명칭은 Lifecycle Hook 이라고 함.
  • Hook들은 원래 class로 만든 컴포넌트에서 사용 가능함.
    componentDidMount() , componentWillUnmount() 이 두 개가 가장 유용한데, 각각 컴포넌트 첫 등장 후 실행할 코드다른페이지로 넘어가는 등의 사유로 컴포넌트가 사라지기 전 실행할 코드를 자유롭게 담으면 됨.



📍 useEffect 훅

  • function 컴포넌트에서는 useEffect 훅을 많이 사용함.
  • 컴포넌트가 mount 되었을 때, 컴포넌트가 update 될 때 → 특정 코드를 실행할 수 있음.
  • 그래서 위의 라이프사이클에서 설명한 명령을 줄 수 있다는 게, useEffect를 이용한다면 Detail 페이지 방문 후 alert 창이 2초 후에 사라지게 해주세요 ~ 같은 효과를 줄 수 있음.
 useEffect(() => {
    setTimeout(() => {
      changeAlert(false);
    }, 2000);
  });
  • 컴포넌트가 사라질 때(unmount) 코드를 실행시킬 수도 있음.
    return function 함수명() { 사라질 때 실행할 코드 }
    혹은 return () => { 사라질 때 실행할 코드 }

👉 useEffect는 컴포넌트가 업데이트(재렌더링) 될 때 항상 실행됨.

  • 근데 그러면 안되겠지 !
    useEffect(() => {}, [실행조건]); 이렇게 실행 조건을 지정해주면 됨.
  • 만약, 실행 조건을 비워둘 경우 [] 해당 컴포넌트 등장 시 한번만 실행하고 끝남.

👉 setTimout 타이머를 쓰면 제거까지 해줘야 버그가 덜 생김.

  • useEffect 내에 return () => { clearTimout(타이머) } 코드 입력.



📍 Ajax

  • 원래 GET / POST 요청 시 항상 페이지가 새로고침됨.
  • 서버에 새로고침 없이 요청을 할 수 있게 도와줌.

👉 서버 )

  • 사용자가 페이지 요청을 하면 페이지를 갖다주는 프로그램

👉 요청 )

  • GET : 브라우저의 주소창에 url을 직접 넣는 요청 (특정 페이지 / 자료 읽기)
  • POST : 로그인 같이 서버로 중요한 정보를 숨겨서 전달하고 싶을 때 사용하는 요청



📍 Ajax 사용 방법
1. jQuery 설치해서 $.ajax() 사용
2. axios 설치해서 axios.get() 사용
(리액트, 뷰 등의 환경에서 가장 많이 사용되는 라이브러리)
3. 자바스크립트 문법인 fetch() 사용
(axios와 사용법은 거의 같지만, 호환성 같은 부분에서의 차이가 발생.)

  • 우리가 요청한 자료는 따옴표가 있는 JSON인데, axios라는 라이브러리는 JSON을 보기좋게 Object로 알아서 바꿔줌.
  • 근데 fetch는 잘 바꿔주지 않아서 우리가 따로 Object로 바꿔주는 작업이 필요.

👉 axios 이용
1. axios.get(데이터 요청할 URL)
2. 성공하면 .then()
3. 실패하면 .catch()

  • 서버에 데이터를 보내고 싶을 때 POST 요청하는 법
    axios.post('서버 URL', { 보낼 데이터 });



📍 Context API 혹은 redux

  • 만든 컴포넌트 갯수만큼 앱이 복잡해짐. 그럴 때 사용.
profile
아자아자

0개의 댓글

관련 채용 정보