📝 ErrorNote
[React.js / javascript] 구조 분해 할당 시 오류 발생 (JS 객체와 배열의 차이)
minhe2810
2024. 6. 19. 14:16
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) at handleRegTest (http://localhost:3000/main.9345674c7ec34bc46fb5.hot-update.js:64:27)
구조분해할당을 시도할 때 발생할 수 있는 에러이다.
이는 구조 분해 할당의 대상이 되는 객체가 실제로 이터러블이 아닌 경우 발생한다.
확인할 점
1. 구조분해할당 대상 확인 : 구조분해 할당을 시도하는 대상이 실제로 이터러블인지 확인 (배열이나 객체를 구조분해 하려고 할때 대상이 올바른지 확인해야함.)
처음에는 이벤트 핸들러를 호출하는 곳이 여러개가 아니라서 그런가? 헷갈렸는데
상당히 기본적인 실수였다.
수정 전
const handleRegTest = (e) => {
console.log("handleRegTest() 호출");
console.log(passwordRef.current.value);
console.log("event : ", e.target.name);
const [name, value] = e.target;
// if (!regTest(name, value)) {
// alert(hintMsg.password);
// }
console.log(name, value);
};
수정 후
const handleRegTest = (e) => {
console.log("handleRegTest() 호출");
console.log(passwordRef.current.value);
console.log("event : ", e.target.name);
const { name, value } = e.target;
// if (!regTest(name, value)) {
// alert(hintMsg.password);
// }
console.log(name, value);
};
구조분해 할당을 할때 name, value를 감싸는 부분을 [] 배열 타입으로 선언을 해버렸다.
다시 {}로 수정하자 정상적으로 작동한다.
{ }와 [ ]의 차이
- 객체 구조 분해 할당
- {}를 사용하여 객체의 속성을 추출
- 키-값 쌍으로 구성되어있음
const obj = {name : "minhee", age : 20};
const {name, age} = obj;
console.log(name); // "minhee"
console.log(age); // 20
- 배열의 구조 분해 할당
- []를 사용하여 배열의 요소를 추출
- 순서가 있는 요소들의 집합
const arr = ["minhee", 20];
const [firstName, age] = arr;
console.log(firstName); // "minhee"
console.log(age); // 20
변수의 첫번째 요소와 두번째 요소를 각각 firstName, age에 할당하게 된 것.
정리
객체형태는 key-value 형태이니까 {}로 꺼내면 각각의 속성에 맞는 변수가 할당이 되는데
배열의 경우에는 순서대로 값이 할당이 되기 때문에 오류가 발생하는 것이다.
즉, 나의 실수를 분석해보면 분명 e.target에 있는 것들은 각각 속성이 key-value로 존재하는 객체의 형태인데
[]을 사용하여 배열로 할당을 하려고 하니 오류가 발생하는 것이다.