몇 주간 바닐라 js로 작업하며 react로 사고를 하지 않았기도 했고 js로 만들었던 작업물을 처음부터 다시 만들지 않고 수정해서 react로 만드는 작업을 시도하다 보니 react로 사고하기가 어려웠던 것 같다.
그래서 계속 react로 사고하기 위해 타파해야 했던 부분이 여러 개 있었지만 오늘 겪었던 타파가 좀 큰 알 깨기였던 것 같아 블로그를 작성해 보려 한다.
MainRight
function MainRight() {
return (
<section className="main-right">
<Myprofile />
<Stories />
<Recommends />
<Footer />
</section>
);
Recommends
function Recommends({recommends}) {
return (
<div className="right-wrapper wrapper">
<div className="right-header">
<span className="right-title">회원님을 위한 추천</span>
<span className="show-all">모두 보기</span>
</div>
<ul className="recommends">
{recommends.map((recommend, i) => (
<Recommend recommend={recommend} key={i} />
))}
</ul>
</div>
);
}
Stories
function Stories({stories}) {
return (
<div className="right-wrapper wrapper">
<div className="right-header">
<span className="right-title">스토리</span>
<span className="showAll">모두 보기</span>
</div>
<ul className="stories">
{stories.map((story, i) => (
<Story story={story} key={i} />
))}
</ul>
</div>
);
}
그래서 scss 의 mixin 을 사용해 보기도 하고 value 로 적용을 해보기도 했다. 하지만 마무리 시도를 해도 뭔가 더 복잡해질 뿐 해결책이라는 느낌이 들지 않았다.
그러다 react 적 사고를 하게 되었다!!
두둥!!
이 반복되는 스타일 부분을 컴포넌트로 만들면 되는 것이 아닌가?!!!!
container 부분을 wrapper 컴포넌트로 만들기.
(children props 를 만들어 하위 컴포넌트 감싸주고 포함된 컴포넌트 보이게 하기)
각 header 부분을 삭제하고 header 컴포넌트를 만들어 각 title을 props로 전달해 각각의 header 만들기
변경된 MainRight
function MainRight() {
return (
<section className="main-right">
<Myprofile />
<MainRightWrapper>
<MainRightHeader title="스토리" />
<Stories />
</MainRightWrapper>
<MainRightWrapper>
<MainRightHeader title="회원님을 위한 추천" />
<Recommends />
</MainRightWrapper>
<Footer />
</section>
);
변경된 Recommends
function Recommends({recommends}) {
return (
<ul className="recommends">
{recommends.map((recommend, i) => (
<Recommend recommend={recommend} key={i} />
))}
</ul>
);
}
변경된 MainRight
function Stories({stories}) {
return (
<ul className="stories">
{stories.map((story, i) => (
<Story story={story} key={i} />
))}
</ul>
);
추가된 MainRightWrapper
function MainRightWrapper({ children }) {
return <div className="main-right-wrapper">{children}</div>;
}
추가된 MainRightHeader
function MainRightHeader({ title }) {
return (
<div className="main-right-header">
<span className="title">{title}</span>
<span className="show-all">모두 보기</span>
</div>
);
}
쪼개는 것에 초점을 맞추지 않고 더 고차원적으로 고민하여 컴포넌트를 나눌 생각을 충분히 해야 한다는 것을 알게 되었다.
오늘도 역시 느낀 기획에서 충분히 많이 생각하고 또 생각해야 한다.
마음이 앞서 코드부터 치지 말자!!!!!
시간이 아깝게 느껴지더라도 최대한 생각하고 계획하고 사고하자!!
이번에는 react를 더 제대로 느끼기 위해 js를 react로 고쳐 다음에는 이런 일이 없겠지만 다음부터는 js를 react로 고칠 생각하지 말고 그냥 처음부터 react로 만드는 것이 훨씬 편한 개발이 될 것이라는 것!!!