방명록
- [React.js] useInput 커스텀 Hooks 사용시 input 창 두 개 이상일 경우 앞서 작성한 내용이 사라지는 현상??2023년 04월 21일 11시 32분 30초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
https://react.vlpt.us/basic/21-custom-hook.html
"벨로퍼트와 함께하는 모던 리액트"로 학습 중에 궁금한 점이 있었다. useState의 setForm의 파라미터로 객체를 넣는 경우와 콜백함수를 넣는 경우에 어떤 차이점이 있을까? 테스트 결과 객체를 파라미터로 넣을 경우 useInput 커스텀 Hooks로 input 창을 두 개 이상 사용할 시 앞서 input 창에 작성한 내용이 초기화되었다. 테스트한 코드는 다음과 같다. 왜 이러한 차이가 발생하는지 알아봐야겠다!
import { useCallback, useState } from "react"; function useInput(initialForm) { const [form, setForm] = useState(initialForm); const onChange = (e) => { const { name, value } = e.target; setForm((form) => ({ ...form, [name]: value })); // 객체를 파라미터에 넣는 경우, 콜백함수를 파라미터에 넣는 경우의 차이점?? // setForm({ ...form, [name]: value }); // 객체를 파라미터에 넣는 경우, 콜백함수를 파라미터에 넣는 경우의 차이점?? }; const reset = useCallback(() => setForm(initialForm), [initialForm]); // useCallback 적용 안할 시 Too many re-renders 발생 return [form, onChange, reset]; } export default useInput;
2023-04-23 추가
아래의 코드와 같이 setForm의 파라미터에 콜백함수가 아닌 객체를 넣었고, reset 함수의 경우에도 useCallback 훅을 사용하지 않았음에도 불구하고 전혀 문제가 없었다. 그렇다면 왜 그때는 위와 같은 문제가 발생했던 것일까? 이 문제는 계속 고민해 봐야겠다!
import { useState } from "react"; const useInput = (initialForm) => { const [form, setForm] = useState(initialForm); const onChange = (e) => { const { name, value } = e.target; setForm({ ...form, [name]: value, }); }; const reset = () => setForm(initialForm); return [form, onChange, reset]; }; export default useInput;
728x90반응형'언어·프레임워크 > React.js' 카테고리의 다른 글
[React.js] 컴포넌트에서 svg 파일 import 하기 (0) 2023.04.27 [React.js] Cannot read properties of undefined 해결 (0) 2023.04.24 [React.js] "Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite loop." 해결 (0) 2023.04.03 [React.js] 배열을 객체로 변경하던 중 만난 에러 해결 (0) 2023.03.21 [React.js] textarea에 글이 써지지 않는 문제 해결 (0) 2023.03.03 다음글이 없습니다.이전글이 없습니다.댓글