• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 React에 addEventListener 사용 오류

React에 addEventListener 사용 오류

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 글쓴이
  • #96191

    서유빈
    참가자
    안녕하세요.
    
    useEffect() 속에 addEventListener 이벤트를 사용하는데 에러는 없지만 
    작동이 되다가 안되다가 합니다..(특정 실행조건이랄게 없습니다..거의 안된다고 볼 수 있음)
    
    코드는 
    useEffect(()=>{
    const label = document.querySelector('.label');
    const options = document.querySelectorAll('.optionItem');
    const handleSelect = function(item) {
    label.innerHTML = item.textContent;
    label.parentNode.classList.remove('active');
     }
    options.forEach(function(option){
    option.addEventListener('click', function(){handleSelect(option); setList(false);})
     })
     }) 
    
    
    
    #96229

    codingapple
    키 마스터
    option태그엔 클릭이벤트 안일어날걸요 
    select태그에 change 이벤트리스너같은거 붙입시다
    useEffect뒤에 [] 도 추가하는게 나을듯요
    #96298

    서유빈
    참가자
    options.forEach(function(option){
    option.addEventListener('click', function(){handleSelect(option); console.log(0);})
     })
    이부분에서 click 이벤트 실행시 console 창에도 0이 잘찍히는데, 이제 값을 전달한 뒤 list 창을 닫으려고 하는 setList(false);를 뒤에 넣어주면 실행이 되지 않는 것 같습니다.
    값을 넘긴 후에 리스트 창을 다시 닫으려는 코드를 어디에 추가하면 좋을까요?
    #96322

    codingapple
    키 마스터
    option 태그말고 select태그 찾아서 change 이벤트리스너 안에 코드짭시다
    #96325

    서유빈
    참가자
    선생님 제가 정말 이해가 안가서 그러는데요... 
    전체 코드가 이건데 
    
    import { useEffect, useState } from "react";
    import { BiDownArrow, BiUpArrow } from 'react-icons/bi';
    import Dropdown from "./Dropdown";
    function SelectBox() {
    let [list, setList] = useState(false);
    useEffect(()=>{
    const label = document.querySelector('.label');
    const options = document.querySelectorAll('.optionItem');
    // 클릭한 옵션의 텍스트를 라벨 안에 넣음
    const handleSelect = function(item) {
    label.innerHTML = item.textContent;
    label.parentNode.classList.remove('active');
     }
    // 옵션 클릭시 클릭한 옵션을 넘김
    options.forEach(function(option){
    option.addEventListener('click', function(){handleSelect(option);console.log(0);})
     })
     }, )
    return ( 
    <div className='selectBox'>
    <button className='label' onClick={()=>{setList(!list)}}>选择程度<span className="icon">{list ? <BiUpArrow size={20}/>:<BiDownArrow size={20}/>}</span></button>
    <Dropdown list={list}>
    
      <li className='optionItem'>1 级 <li className='optionItem'>2 级 <li className='optionItem'>3 级 <li className='optionItem'>4 级 <li className='optionItem'>5 级 <li className='optionItem'>6 级 <li className='optionItem'>7 级 <li className='optionItem'>8 级 <li className='optionItem'>9 级 <li className='optionItem'>10 级
    </Dropdown> </div> ) }export default SelectBox; 제가 select와 option 태그를 사용하지 않아서요... 아니면 제가 이해를 잘못하고 있는건가요...?ㅜㅜ
    #96344

    codingapple
    키 마스터
    이벤트리스너안에선 state변경 잘안될수도 있어서 
    현재 li태그들 상태 저장할 state 만들고
    state에 따라서 li 태그들 어떻게 클래스명 보일지 if문같은거쓰고
    li 클릭시 state 원하는대로 변경합시다
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠