TextField는 사용자의 입력을 받고 입력값에 따라 에러가 뜨거나, 입력이 완료되었다는 표시를 하는 공통 컴포넌트이다. 컴포넌트 특성상 안에 있는 사용자의 입력값에 따라 스타일이 달라진다.
defaultwarningdefaultfocusedfilledreadonly상황에 따라 label, caption이 추가되기도 한다. 다양한 상황이 존재한다. 이 상황 처리에 대한 로직을 어디에 넣는게 맞을까? 현재 우리 프로젝트는 react-hook-form을 활용하고 있다.
첫 번째 방법은, useForm 혹은 useFormContext에서 받은 props를 통째로 TextField에 넘겨주고, TextField내부에서 status에 따라 error처리, success처리를 하는 것이다. 모든 책임을 TextField컴포넌트에 넘겨주는 것이다.TextField외부에서는 register와 hookForm을 넘겨주면 되는 것이다. 그 이후에는 TextField안에서 처리하는 것이다. 밖에서는 안에서 무슨 일이 일어나는 지 알지 않아도 된다. 완전 추상화라 할 수 있다.
위와 같은 생각을 가지고 코드를 작성해보았다.
TextField.tsxprops로 넘겨주는 값이 많아서 내부에서 처리하는 로직이 밖에서는 보이지 않는다. 이제 정말 좋은 코드일까?
프론트엔드 팀원인 주혁님이 ButtonGroup과 Button을 구분하여 구현한 코드이다.
https://github.com/gloddy-dev/gloddy-client/pull/188
위 방법처럼 TextFieldGroup으로 TextField를 감싸면 어떨까? 그렇다면, TextFieldGroup 내부에 TextFieldLabel, TextFieldCaption 각각 컴포넌트를 직접 넣는 것이다. 이 방법이 좋을까? 혹은 props로 label, caption등을 넘겨줘서 내부에서 처리하는 것이 좋을까?
지금까지는 나는 후자와 같은 방식으로 구현을 하였다. 이러한 방식으로 구현을 하니 한 컴포넌트가 상당히 많은 역할을 해서 무거워지고, 코드가 상당히 난잡해졌다. 전자와 같은 방식으로 구현을 하면 이러한 코드의 복잡함이 어느정도 해소가 될 것이다.