타이어 스쿼드에서 입력된 핸드폰 번호가 적절한지 판단하는 validation을 추가하기로 했다. PhoneInput
을 사용하기만 하면 알아서 에러 메시지를 보여주길 원했기 때문에 컴포넌트 안에 errorMessage
state를 넣었다.
컴포넌트 안에서만 동작하는 것은 문제가 없었으나, 올바른 핸드폰 번호가 입력되었는지 PhoneInput
도 알아야 하고 Index
도 알아야 했다. 왜냐하면 index
내부에 있는 submit
은 핸드폰 번호에 문제가 없을 때 활성화되기 때문이다. 이럴 땐 어떻게 처리할 것인가?
팀장님께서 제안해주신 방식은 2가지이다.
PhoneInput
에서 onChange = (phone:string, error: string) => {}
받아서 에러가 발생할 때마다 error
를 바꾸는 것이다.validatePhone()
을 util에 만든다. 잘못된 값임을 설명하는 이유를 throw Error를 한다.이때 1번에서의 문제가 있다.
(phone: 01012341234, error: "숫자만 입력해 주세요")
라고 하면, phone
은 올바르지만 에러가 생기는 이상한 state가 만들어진다. 이런 것을 막기 위해서는 error
를 onChange
로 받아서 변환하면 안 된다.결론 👨⚖️
validatePhone
을 만들어서 필요할 때마다 불러서 사용하자.
음... 굳이 유효성 검사를 하는 함수를 만들지 않고 input에 type="tel", pattern="[0-9]{11}", required의 세 속성들을 사용하시면 01012345678과 같은 경우를 제외하면 submit을 거부시키는 input을 만드실 수 있습니다. 이런 식으로 input을 만들고 밑에 텍스트로 문자를 제외한 11자 숫자를 입력해 달라고 알리는 것은 어떨까요? 코드도 확 짧아지고 유지 보수도 편해지는 방법이라 생각합니다.