마지막 onSubmit 에러체크 문제
에러체크할 때 나머지값이 없어도 submit이 되는 문제가 있습니다.
<InfoContext.Provider value={{ value: info, setValue: setInfo, error, setError: (e) => setError({...error, ...e}) }}>
<Form onSubmit={onSubmit}>
<TextField
source="name"
label="이름"
validate={[minLength(3), maxLength(6)]}
/>
<TextField
source="password"
label="패스워드"
validate={[minLength(6), maxLength(12)]}
/>
<CheckboxField
source="confirm"
label="위 내용이 제출됩니다 동의하십니까?"
validate={[checked]}
/>
</Form>
</InfoContext.Provider>위 코드에서 setError update해주는 로직을
// before
setError: (e) => setError({...error, ...e})
// after
setError: (e) => setError(prev => ({...prev, ...e}))아래와 같은 형식으로 바꿔주면, 리팩토링 이전과 같이 동작을 하게됩니다.
batch의 문제인지, 불변성의 문제인지 정확히 모르겠네요.
설명해주시면 감사감사!
답변 1
2
안녕하세요 구스타프님!
엄청 좋은 질문을 해주셨네요! batch까지 의심하셨다니 내공이 조금 있으시군요
"batch 문제일 것이다" 라는 가설을 검증하기 위해서 상태 업데이트를 순차적으로 실행하도록 해봤는데요.
useInput.tsx 의 useEffect에서
setTimeout(() => setError({ [source]: err } as PartialErrorInfo), 0);로 변경하거나
queueMicrotask(() => setError({ [source]: err } as PartialErrorInfo))상태변경이 batch 로 동작하지 않도록 해도 말씀하신대로 submit 이 동작합니다. 따라서 batch 문제는 근본적인 문제가 아닌 것 같고..
하지만
말씀하신대로 setError에 함수를 넘겨서 previous state를 사용하면 정상 동작하게 되는데, 그 이유는
useInput의 useEffect 가 각 필드 TextField, CheckboxField 에서 독립적으로 실행됩니다.
context에 넘겨주는 setError 함수 내부에선 error의 값이 모두 undefined입니다.
setError: (e) => {
// 3개의 각 필드에서 실행되는 시점에 error는 {name: undefined, password: undefined, confirm: undefined}
setError({ ...error, ...e });
}그래서 구체적으로 error 상태가 어떻게 업데이트가 되냐면
setError({ name: “최소 3자 이상 입력해주세요", password: undefined, confirm: undefined})
setError({ name: undefined, password: “최소 6자 이상 입력해주세요", confirm: “반드시 체크해주세요”})
setError({ name: undefined, password: undefined, confirm: “반드시 체크해주세요”})이 순서대로 실행되고 마지막으로 실행된 confirm에 대한 에러만 보이게 되는 것입니다.
App.tsx의 CheckboxField 컴포넌트 위치를 Password 텍스트 필드 위로 올리고 새로고침하면 마찬가지로 Password 에러만 나타나게 됩니다.
따라서 제안해주신 방법대로 previous state 를 이용해야 위와 같은 문제가 발생하지 않을 것입니다.
아무튼 이것과 관련해서 강의 내 오류가 있는 부분은 정정하도록 하겠습니다!
감사의 의미로 제 메일 주소로 morishjs@gmail.com 연락처 남겨주시면 감사의 선물을 보내드리겠습니다 🙇♀️
power shell에서는 claude가 정상 실행되는데, cursor terminal에서는 실행 에러 발생하네요.
0
7
1
live server, korean도 확장팩 검색이 되지 않습니다.
0
9
0
CLAUDE.local.md
0
10
1
55강 관련 질문(커밋이 완료되지 않을 때)
0
9
1
클로드 코드를 쓸때 Cursor IDE의 이점?
0
15
1
오류사항
0
27
3
md 파일을 위한 폴더 관리의 기준이 궁금합니다.
0
16
2
혹시 결제연동
0
23
1
claude code가 작업중일때 ctrl t 눌러서 진행상황 확인 불가
0
23
1
메타프롬프트 관련
0
25
2
side bar positon. 어떻게 해도 안돼요..;
0
20
1
모델 고정방법 문의
0
21
2
98강. 1인 사이드프로젝트 시 질문
0
31
2
state 객체로 묶기
0
18
0
강의화면과 Cursor프로그램 화면이 달라서요..
0
25
2
커서 설치했는데 이해 안되네요
0
32
2
강의 마지막이 잘려있는것 같습니다
0
50
2
전부 입력된 코드들만 있는건가요? 따라치면서 하고싶은데...
1
273
1
코드 샌드박스 안되는거같습니다
1
274
1
공유소스 실행시 에러 문의 드립니다~
1
415
1
[섹션 3. Form 컴포넌트로 배우는 실전 기술] 강좌의 소스를 부탁드립니다.
0
292
1
코드샌드박스 주소
1
490
1
test 코드 작성시 질문
0
452
1
TDD - Green, Red, Refactor
1
659
2





