원래 Svelte로 사이드를 하나 진행하고 있는게 있었는데,
긴급하게 무언가를 제작해야 할 일이 생겼다. 약 2주간 진행하는 프로젝트이고 리액트보다 빠른 무언가를 찾아야 할 필요가 있었다.
두 가지를 만족하기 위해서
의 선택지에서 여러가지 기능을 빠르게 작업해야 할 경우 외부 라이브러리의 사용이 필수적이기 때문에 Vue 3로 진행하게 되었다. 잠깐 튜토리얼을 보았을때 Svelte와도 아주 유사하기도 했고...
이것도 좋지만, 더 나은방법이 있을거야!
테스트를 위해서 간단한 페이지 하나를 제작해보기로 한다.
키워드 기반 검색 바를 만들었다. 인풋에 입력하고 엔터를 입력하면 해당 키워드가 버블의 형태로 나타난다.
비교를 위해서 Vue와 Pinia 스토어, 리액트와 Jotai, React-Query를 사용한 프로젝트를 하나씩 만들어 비교해 보았다.
// 위 예시 input 코드
<div v-if="keywords.length" class="flex gap-y-2 w-[100%]">
<TransitionGroup name="list" tag="ul" class="flex flex-wrap gap-x-4 gap-y-2 w-[100%] px-12 py-2 items-center">
<KeywordButton v-for="(keyword, index) in keywords" :key="index" :selected="true" :deleteKeyword="deleteKeyword" :i="index" :keyword="keyword"><span>{{ keyword }}</span></KeywordButton>
</TransitionGroup>
</div>
vue의 코드량: 총 572자.
// 위 예시 input 코드
{keywords.length ? (
<TransitionGroup>
{keywords.map((e, i) => {
return (
<CSSTransition key={e.id} nodeRef={e.nodeRef} timeout={500} classNames="item">
<div ref={e.nodeRef}>
<KeywordButton
selected deleteByIndex={deleteKeyword} i
className="p-4 h-[30px] flex justify-center items-center">
<span>{e.value}</span>
</KeywordButton>
</div>
</CSSTransition>
);
})}
리액트의 코드량: 664
vs code counter 플러그인으로 확인했을 때 90자 정도가 작았다.
위의 snippet에서도 알 수 있듯이, for loop으로 렌더링 할때 코드의 차이가 꽤나 크게 나는 것을 알 수 있었다.
이외에도 이틀간 사용해보았을 때
하지만
와 같은 단점을 무시할 수는 없다고 생각한다.
앞으로 작업을 더 진행해 나가면서 더 적을 내용이 있을거라고 생각한다.