Problem&Solution

객체 비교에서 한 실수

*히아* 2024. 5. 2. 17:39
<ul className="type-list">
	{assistantList.data.map((assistant: ResGetAssistantListDataType) => (
		<li
			className={`type-item ${currentAssistant === assistant ? 'active' : ''}`}
			key={assistant.id}
			onClick={() => {
				setCurrentAssistant(assistant);
				postThread();
		}}>
			<span className="type-cont">{assistant.name}</span>
		</li>
	))}
</ul>

 

currentAssistant와 assistant가 동일할 때 다른 컬러로 변경하는 효과를 주고 싶었다. 분명 같은 값을 가진 객체인데 색이 변하지 않는 문제가 발생했다. 

그렇게 취준할 때 익히 배웠던 참조타입, 원시타입의 차이점이다..

이렇게 실제 현업에서 실수해보니 다시금 중요성을 느끼는 1인.. 

 

객체는 값이 아닌 주소 값을 바라보기 때문에 두 객체가 같은 값을 가지고 있어도 다른 주소 값을 참조하고 있기 때문에 다른 값이라고 인식하는 것!!

 

따라서 객체 자체가 아닌 객체 고유 id를 비교하는 것으로 해결할 수 있다. 

<ul className="type-list">
	{assistantList.data.map((assistant: ResGetAssistantListDataType) => (
		<li
			className={`type-item ${currentAssistant.id === assistant.id ? 'active' : ''}`}
			key={assistant.id}
			onClick={() => {
				setCurrentAssistant(assistant);
				postThread();
		}}>
			<span className="type-cont">{assistant.name}</span>
		</li>
	))}
</ul>