리액트

폴더 구조 체계화

권현재 2023. 1. 16. 23:23

하나의 파일에 너무 긴 코드가 작성되어있으면 유지보수 및 관리가 어려울 수 있다.

상대방이 코드를 어렵지 않게 해석하기 위해 기능별로 파일들을 정리할 필요가 있다.

 

1. 컨테이너 (js) / 프리젠테이셔널 패턴(html) 

-JS 부분 : container component

-HTML(JSX) 부분 : presentational component, 줄여서 presenter

2. 훅스 패턴 (함수) 

 

3. 아토믹 패턴 (파일하나에 기능하나씩)

 

컨테이너/프리젠테이셔널 방식보다는 훅스패턴 방식을 많이 사용하고 있지만,

아직 컨테이너 / 프리젠테이셔널 방식을 사용하는 회사가 있을 수 있으니 모두 익혀 놓는 것이 중요하다.

 

1. 컨테이너(js) / 프리젠테이셔널 패턴(html) 

이전에 제작한 포트폴리오 파일을 위 방식으로 나눠서 저장하였다.

1. index.js : return <불러올함수> 작성

2. 파일명.container.js : js와 html에 적용되는 함수 작성

3. 파일명.presenter.js : html 작성

4. 파일명.queries.js : gql 작성

5. 파일명.styled.js : css 작성

 

또한 import를 두가지 방식으로 정리했는데 차이를 알았다.

import { 변수 } from "경로" : 경로에 선언 가능한 함수가 여러가지일 때 {} 사용

import 변수 from "경로" : 경로에 선언 가능한 함수가 한가지일 때 {} 미사용

 

파일을 옮길때 헷갈린것은 파일명.container.js 위치의 html 부분이였다.

 

import를 한다고 내부에 있는 데이터까지 연결되는 것이 아니였다.

그래서 두 컴포넌트 간 데이터를 연결하려면, props를 사용해야 했다.

( 단방향 : 부모에서 자식으로만 전달 가능합니다) -자식에게 작성 

 

해당 파일에는 prestenter의 함수를 가져와 사용하지만 HTML에서 함수가 사용된다면

container 파일에서 미리 선언해줘야 사용할 수 있다.

 

이때는 props를 사용할 수 있다. (이름 변경가능)

Mutation에 사용한 체계화
query에 사용한 체계화

 

이때 가장 큰 차이점은 저장된 데이터를 불러오는 query의 경우

useQuery가 할당되어있는 const {data}가 있으므로,

container에서는 한번만 선언해주고 presenter에서 동일한 이름으로 사용할 수 있다는 점이다.

(같은곳에 정보가 저장되어있기때문에 이렇게 쓸 수 있는 것 같다)

 

Mutation에서는 함수의 기능이 모두 다르므로 (input 별로) 하나씩 변경해줘야한다.

기능 예시 이미지