PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2023/06/22 13:38:10
Name Mindow
Subject [질문] 웹개발자분들께 간단한 스크립트 질문 (수정됨)
개발환경: vue 3

// html
[div ref="box"]
[button @click="toggleOption"]버튼[/button]
[/div]


//script
import { ref } from 'vue'
export default {
setup(){
const toggleOption = () => {
  this.$refs.box.classList.toggle('active')
}

return { toggleOption }
}
}



---------------------------------

대충 이런 구조일 때 크롬브라우저 콘솔에
Uncaught TypeError: Cannot read properties of undefined (reading 'refs') 오류가 뜹니다.

원하는 결과는 클래스 active가 클릭할 때마다 토글되는거에요

vue2에서는 this.$refs 로 하니까 dom 접근이 되서 클릭 이벤트가 잘 먹혔던 것 같은데 vue3에서는 에러가 나더군요

어떻게 해야될까요?

참고로 div에 ref 대신에 id로 바꾸고

document.querySelector('#box')로 접근하니까 잘 먹더군요~

--------
* 개발자라면 당연히 눈치채셨겠지만 피지알 편집기 특성상 들여쓰기 이쁘게 안 되고 꺽쇠 넣으면 안 되서 대괄호로 대체한거 양해부탁드립니다 ^^;


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
보급보급
23/06/22 13:43
수정 아이콘
this.$refs 로 해보시겠습니까
23/06/22 13:46
수정 아이콘
아아 글 내용에서 누락이 되었었군요! this.$refs로 해도 안 되더군요 ㅠㅠ
하도 답답해서 this.refs 로도 시도해본게 글 내용에 누락이 되었군요
this.$refs 로 해도 콘솔창은 (reading 'refs') 오류 뱉습니다 ㅠㅠ
보급보급
23/06/22 13:57
수정 아이콘
(수정됨) 이렇게 처리하시는건 어떠신가요?
const isActive = ref(false);

const toggleOption = () => {
isActive.value = !isActive.value;
}

<div :class="isActive ? 'active' : '' " >
23/06/22 14:07
수정 아이콘
감사합니다~
아래 파인애플님 댓글을 참고하여 해보니 잘 됩니다~!
23/06/22 14:08
수정 아이콘
오잉 아래 파인애플님 댓글이 갑자기 사라짐..크크
23/06/22 13:57
수정 아이콘
https://geundung.dev/108

ref의 정의가 2와 3 에서 확 다른거같아요! 이 글 참고해보세요
23/06/22 14:16
수정 아이콘
답변 감사합니다!!
파인애플
23/06/22 14:10
수정 아이콘
직접 DOM 조작하는 것 보다는 반응형 변수로 통제하는 게 권장됩니다

<template>
<div :class="{ active: isActive }">
<button @click="toggleOption">button</button>
</div>
</template>

<script>
import { ref } from 'vue';

export default {
setup() {
const isActive = ref(false);

function toggleOption() {
isActive.value = !isActive.value;
}

return { isActive, toggleOption };
},
};
</script>
23/06/22 14:22
수정 아이콘
답변 감사합니다~!
혹시 같은 형태의 div, button 형태가 형제로 하나 더 있고
하나를 클릭하면 다른 형제는 클래스바인딩 걸어놓은게 false가 되게 하는 방법이 있을까요?
두벌이라고 가정했을 때 isActive1, isActive2 이런 식으로 각각 변수지정하니 되긴 하던데
왠지 좋은 방법은 아닌 것 같아서요~ 세벌일땐 isActive3, 10개일 땐 isActive10까지 양산할 수는 없으니까요 ^^;;
23/06/22 14:44
수정 아이콘
boolean 이 아니라 int나 enum을 써서 해결하시면 됩니다.
23/06/22 16:30
수정 아이콘
윗 댓글에 대한 답을 드리자면 현재 선택된 형제(?)의 id를 저장해두는 ref를 만들고,
현재 요소의 id가 ref에 있는 id와 같을 경우에만 active 클래스를 붙이면 될 것 같습니다.
초콜릿
23/06/22 21:04
수정 아이콘
ref로는 댓글이 있으니 reactive로 해 보면...
script setup
const state = reactive({ current: 0 });
각 버튼마다 @click할 때에 setCursor(1) 같은 거 실행되게 해 주고,
setCursor(i)는 state.current = i; 하게 하고...
div에는 :class 해서 state.current에 따라서 특정 클래스가 붙게 해주면...
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
171327 [질문] 정장용 가방 브랜드나 제품 추천 부탁드립니다~ [7] Secundo6087 23/06/26 6087
171326 [질문] 포켓몬 소드 스토리 dlc 부터할수 있나요? [1] 스물다섯대째뺨6568 23/06/26 6568
171325 [질문] 모카포트 추출 실패입니다. 콸콸 넘쳐서 한강 에스프레소.. [22] 모나크모나크7292 23/06/26 7292
171324 [질문] 아파트 공사 현장 가까운 곳에서 사신분 계실까요? [16] 안녕!곤8529 23/06/25 8529
171323 [질문] 일이 끝나고 시간이 많이 남습니다. [17] 마제스티8159 23/06/25 8159
171322 [질문] 아이폰 14 프로맥스 쓰는 분 있나요? 생각보다 커서 놀랐습니다. [34] Valorant7531 23/06/25 7531
171321 [질문] 140만원 PC 견적 질문 드립니다. [5] 베스킨라8163 23/06/25 8163
171320 [질문] 스마트폰 해외직구 해볼만한가요?? [11] Broccoli8819 23/06/25 8819
171319 [질문]  서울시청에서 파주출판단지로 가는 제일 빠른 대중교통은 뭘까요? [10] 오하이오7709 23/06/25 7709
171318 [질문] 창문형 에어컨 가성비 좋은게 뭐가 있을까요? [4] 그때가언제라도7793 23/06/24 7793
171317 [질문] 한국은 왜 아직도 이민자 및 외노자를 띄워주는 영화나 드라마를 만들지 않을까요? [30] 보리야밥먹자9473 23/06/24 9473
171316 [질문] pc 원격용 태블릿 추천 부탁드립니다 [2] 키르7893 23/06/24 7893
171315 [질문] 갤럭시21 어떤가요? [6] 사이시옷8297 23/06/24 8297
171314 [질문] 테니스 명경기 추천해주세요! [20] 꿀깅이6600 23/06/24 6600
171313 [질문] 월드컵 내에서 부심이 기를 들고 주심이 경기를 그대로 진행하는 경우 [3] 애플댄스6422 23/06/24 6422
171312 [질문] 논리적으로 말하는 법에 대한 책 추천 부탁드립니다. [20] NaS.KiJuK6503 23/06/24 6503
171311 [질문] OO는 딱지치기해서 땄냐? 라는 표현에 대해서 여쭙니다. [21] 임마리8689 23/06/24 8689
171310 [질문] 배터리 공장에서 제조 생산/설비보전 담당자는 무슨 일을 하나요? [4] 대출 30년7652 23/06/24 7652
171309 [질문] 서울에 혹시 이비인후과 2차 이상 병원이 있을까요? [4] 회색사과6049 23/06/24 6049
171308 [질문] 수학 문제 하나만 풀어주세요~ [5] 묵리이장8047 23/06/24 8047
171307 [질문] 탈모 질문입니다, 휴지기? 시기? [4] 노래하는몽상가7003 23/06/23 7003
171305 [질문] (약혐) 이거 혹시 무슨 벌레?일까요? [4] 꽃비8639 23/06/23 8639
171304 [질문] 주택청약통장을 해지하고 다시 재가입하는게 맞을까요? [8] wersdfhr7847 23/06/23 7847
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로