formik과 yup validaion으로 사용하는건 많은 블로그에 잘 나와있다.
여기
https://velog.io/@roh160308/%EB%A6%AC%EC%95%A1%ED%8A%B8React-Formik-Yup
에도 기본적으로 잘 나와있다.
다만, yup에서 이전 field 의 value를 다른 field 에서 참조해서 사용하는건 한글 포스팅으론 아직 누구도 올린거 같지 않길래 올려본다
즉 how to refer to different values when validating in yup lib.. 정도의 질문이 될듯
간단한 formik와 yup 간 같이 사용하는법
formik은 기본적으로 form의 모든걸 지원해주는 lib라 생각하면된다.
1. form에서 initialValues 들을 설정해줄 수 있으며,
2. validation 을 사용자가 함수 만들어 걸어 주거나, yup을 사용해서 걸어주거나 해서 validation을 설정 해 줄수 있으며,
3. submit 버튼을 눌렀을 때, submit 함수를 안만들고 자체 props onSubmit에서 함수에 들어갈 로직을 만들어서, submit 시 작업을 해줄수 있다.
4.기본적으론 onChange=handleChange 로 handleChange를 onChange에 걸어 주어 사용해도 되지만 난 hook으로 만들어 TextField를 사용하기에 useField()함수를 사용했다. useField()로 사용할땐 handleChange가 아닌 다른방법으로 사용하면 된다. 아래에 설명.
라이브러리 받아서 아래처럼 걸어주고
커스텀 한 textField 컴포넌트에 name값 설정해주고
useField 받아와서 field, meta 받아와서,
아래처럼 사용할 input 종류 컴포넌트에 props, filed 넘겨주고면된다.
helperText는 default로는 props.helperText가 하단에 뜨지만, errorText가 있으면 하단에 erroText가 뜨도록 조건문으로 만들어둔 부분이다.
yup은 아래처럼 사용한다.
yup 라이브러리로 import 갖고 와 object() 또는 object().shape()으로 validtaionSchema를 만들어서 fomik에 걸어주면 된다. 위에 shape()달린거 안달린거는 아래 설명한다.
본론으로 들어가자면 위에 모집인원 폼을 만든다면, 최소인원이 2명이 셋팅이 되면 최대 인원은 무조건 2명 이상이 되어야 한다. 1명이 되면 안된다. 그래서 앞에 입력한 최소인원의 value를 최대인원 validation이 작동할때 참조가 되야 하는데 기본적인 yup에 기능엔 서로 value를 참조하는건 없다.
따라서 구글링 해봤을때 한국어 자료는 전혀 없었고,
외국 글 자료 괜찮은거 2개를 찾았다.
https://github.com/jaredpalmer/formik/issues/145#issuecomment-325941479
즉 내가 사용한 방식은
이런식으로 사용하면 된다.
적고 보니 1번보다 2번이 더 간단하다. 그런데 내가 lazy()함수를 완전 이해한건 아닌것같아 좀 찝찝해서 1번 when으로 해결하였다.
formik vs react-form
https://www.reason-to-code.com/blog/why-do-we-have-to-use-formik/