계정을 생성하는 화면이 있었는데, 그 화면에 중복확인 기능이 들어가야 했다.
그래서 내가 중복확인 기능을 추가하기로 했는데,
분명 로컬에선 잘 돌아가던 기능이.. 서버에 올라가니까 먹통이 되었다..?
아예 무한 루프에 걸려서 화면이 멈춰버렸다...
<q-input
ref="idInputRef"
v-model="idInput"
maxlength="50"
:rules="[required_rule, id_rule]"
/>
<q-btn
class="y-btn"
label="중복 확인"
:disable="idInput.length === 0 || !checkIdValidation()"
@click="checkDuplicateId"
/>
<script setup lang="ts">
const checkIdValidation = () => {
if (idInputRef.value.validate()) {
return true;
} else {
return false;
}
};
</script>
내 의도는 idInput의 값이 없거나 validation 체크에 실패하면 버튼을 disable처리하는거였는데,
idInput에 입력만 하면 화면이... 멈춰 버리니 실서버에서는 아이디를 생성 조차 할 수 없는 상황이 되어버렸다.
왜 자꾸 무한루프에 걸리는건지 알아보니 v-model="idInput"으로 인해서 idInput이 바뀔 때마다 checkIdValidation이 호출되기 때문이라고 한다.
그래서 computed 속성을 이용해서 idInput에 값이 없거나 validation을 만족하지 않으면 false를 반환하도록 했고,
이렇게 변경하니 무한루프에 걸리지 않고 코드가 제대로 작동하게 되었다.
<q-input
ref="idInputRef"
v-model="idInput"
maxlength="50"
:rules="[required_rule, id_rule]"
/>
<q-btn
class="y-btn"
label="중복 확인"
:disable="idDisabled"
@click="checkDuplicateId"
/>
<script setup lang="ts">
// 입력한 아이디가 validation을 만족할 때만 중복체크 버튼 활성화
const idDisabled = computed(() => {
return (
(idInput.value.length === 0 || idInputRef.value?.hasError) ?? false
);
});
</scirpt>
처음 만난 무한루프였는데, vue에서 제공하는 기능들을 제대로 이해하지 않으면
또 다시 무한루프를 만날 수도 있겠다는 생각이 들었다.
ref, computed 등을 다시 이해하는 시간을 가져야겠다는 생각을 하게 되었던 기능이었다.
'2024 회사 프로젝트' 카테고리의 다른 글
엑셀 다운로드 기능 FE에서 해결하기 (0) | 2025.01.11 |
---|---|
현재 상태값에 따른 버튼 색상, 문구 변경하기 (0) | 2025.01.03 |
setInterval(), clearInterval()을 사용한 카운트다운 타이머 기능 (0) | 2024.10.30 |
비밀번호 변경, 초기화 기능 (3) | 2024.10.24 |
첫 프로젝트 (0) | 2024.10.21 |