-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
onChangePasswordCheck [password] 인자 문의
23.08.15 22:12 작성 조회수 209
0
안녕하세요 zerocho 님
아래 코드에서
const onChangePasswordCheck = useCallback(
(e) => {
console.log("onChangePasswordCheck1 :" + e.target.value);
console.log("onChangePasswordCheck2:" + passwordCheck); //전 값을 참조함
setPasswordError(e.target.value !== password);
setPasswordCheck(e.target.value);
},
[password] //passwordCheck 로 바꾸어도 전 값을 참조함
);
1.[password] 부분을 [] 바꾸어도 정상 작동 하는 것 같구요
[] 의미는 최초 render 시에만 함수를 생성한다는 의미로 알고 있습니다만...
2.[passwordCheck]로 바꾸면...
[웹 게임을 만들며 배우는 React/6-5. useMemo와 useCallback] 강의에 의하면
onChangePasswordCheck 안에서 passwordCheck 가 정상 참조 되어야 할 것 같은데..
이전 값으로 참조 되는 것 같습니다.
2번째 인자 작동 방식이 정확히 이해 되지 않습니다.
다시 한번 설명 부탁 드려도 될까요?
(참고자료나, zerocho님, 다른 강의 부분 알려 주시면 직접 찾아 보겠습니다.)
감사합니다.
답변을 작성해보세요.
1
조현영
지식공유자2023.08.16
[password]를 []로 바꾸면 password가 함수 내부에서 안 바뀝니다. [passwordCheck]로 바꾸면 passwordCheck는 바뀌어도 password가 안 바뀌겠죠.
이전 값으로 참조된다는 걸 어떻게 확인하셨나요? 저는 아무리 시도해봐도 제 설명 그대로 나옵니다.
osakapark
질문자2023.08.16
안녕하세요 zerocho 님, 답변 감사드립니다.
1.[password] 로 하였을 때는 문제가 없습니다.
zerocho님 말씀 대로 []이면, password를 갱신하지 못하네요...
zerocho said "useCallback은 너무 기억력이 좋아서, useState의 경우 의존성 배열에 넣지 않으면 평생 기억한다" (맞나요? ㅎㅎ)
2.그런데... 아래와 같이
passwordCheck 로 하였을 때는, onChangePasswordCheck2, onChangePasswordCheck3 에서는 항상 직전 값을 출력합니다. (갱신은 되나 직전 값으로)
onChangePasswordCheck2 는 setPasswordCheck 호출 전이라 직전값을 출력하는 것은 이해가 되는데..
onChangePasswordCheck3 도 직적값을 출력하는 이유는.. setPasswordCheck 이 비동기 작업을 한다는 의미인지요?
const onChangePasswordCheck = useCallback((e) => {
console.log('onChangePasswordCheck1 :' + e.target.value); // 입력값 정상 출력
console.log('onChangePasswordCheck2 :' + passwordCheck); // 직전 값 출력
setPasswordError(e.target.value !== password);
setPasswordCheck(e.target.value);
console.log('onChangePasswordCheck3 :' + passwordCheck); // 여전히(?) 직전 값 출력
}, [passwordCheck]);
답변 1