리액트는 레고를 만들듯이 하나의 블럭들을 끼워맞추는 형태다.
긴 코드들을 작은 조각으로 분리하여 사용할 수 있다는 것이다.
리액트에서는 이를 컴포넌트화 한다고 표현한다.
이 페이지 안의 한 사람을 표현하는 박스는 하나의 컴포넌트 안에 값만 바꿔 표현한 것이다.
<div className="people">
<div className="likelion">
<div className="pertitle">
<img className="smlogo" src="img/logo/likelion.png" alt="멋사로고" />
<div className='llblue'>성결대학교 멋쟁이사자처럼 11기</div>
<div className='instagram'><a href="https://www.instagram.com/likelion_sku/" target='_blank' rel="noopener noreferrer"><FaInstagram /> likelion_sku</a></div>
</div>
<div className="gridpeople">
<Person id={6}/>
<Person id={7}/>
<Person id={8}/>
<Person id={9}/>
</div>
</div>
<div className="renew">
<div className="pertitle">
<img className="smlogo1" src="img/logo/renewlogo.png" alt="리뉴로고" />
<div className='renewyellow'>RE:NEW 총학생회</div>
<div className='instagram'><a href="https://www.instagram.com/sku_39th_renew/" target='_blank' rel="noopener noreferrer"><FaInstagram /> sku_39th_renew</a></div>
</div>
<div className="gridpeople">
<Person id={1}/>
<Person id={5}/>
<Person id={2}/>
<Person id={3}/>
<Person id={4}/>
</div>
</div>
</div>
위 사진의 전체 페이지를 구성하는 코드이다.
잘보면 각 개인은 의 컴포넌트로 구성되어 있다.
Person 컴포넌트가 작은 한 조각이 되는 것이다.
Person 컴포넌트 안에도 약 30줄 정도의 코드가 있는데
이를 컴포넌트화 하지 않고 작성한다면 한 파일에 300~400줄이 넘는 코드가 작성된다.
그렇게 작성하면 정말 최악의 가독성 파티,,
아무튼 이렇게 각 개인을 컴포넌트화 시켜서 간단하게 표현했다.
컴포넌트 화를 하는 이유는
1. 컴포넌트를 작은 조각으로 분리하여 다른 부분에서 재사용할 수 있다.
2. 컴포넌트는 독립적으로 관리되므로, 수정 또는 유지보수가 필요한 경우에 해당 컴포넌트만 수정하면 된다.
3. 컴포넌트 간에 프로퍼티(Props)를 사용하여 데이터를 전달할 수 있다.
이렇게 많은 장점들이 있기 때문~!
그러면 컴포넌트 옆에 있는 저 id={1} <- 요건 뭐냐면
바로 프롭스(Props)라는 거다.
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하고,
전달받은 컴포넌트에서 해당 데이터를 사용할 수 있는 것
컴포넌트화해서 사용할 때 데이터가 연결되어야 더 효율적으로 관리할 수 있다.
나는 json형태로 사람들의 정보를 저장하고 각 사람들에게 id를 달아주어 구분했다.
위의 코드 안에서 person 컴포넌트를 사용했기 때문에
person 컴포넌트는 자식 컴포넌트가 되는 것이다.
해당 파일은 부모 컴포넌트이고, 부모 컴포넌트는 id로 N의 값을 전달한다.
function Person({id}) {
return (
<div className="pbox">
{Person.map(person => (
(person.id === id) && (
<div key={person.id}>
<img className="Pimg" src={person.image} alt="personimg" />
{/* <img className="Pimg" src="img/about/minjo.png" alt="personimg" /> */}
<div className="Pinfo">
<img src={person.logo} alt="personimg"/>
<div className='name align-middle'>{person.name}</div>
</div>
<div className="Pdepart">{person.department}</div>
<div className="Pposi">{person.position}</div>
<div className='Prole'>{person.role}</div>
</div>
)
))}
</div>
)
}
자식 컴포넌트인 Person.js에서는 Person({id}) 이런 형태로 값을 받아와 사용할 수 있다.
- json 형태로 저장되어있는 개인의 정보를 가져오고
- 부모 컴포넌트에서 받아온 id와 일치하면
- id를 가진 각 개인의 정보를 렌더링하는 방식으로 구현했다.