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

home2 게시판 React 게시판 좋아요 버튼 만들기.

좋아요 버튼 만들기.

  • 이 주제에는 4개 답변, 2명 참여가 있으며 베니1 년, 1 월 전에 전에 마지막으로 업데이트했습니다.
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #107977

    베니
    참가자
    안녕하세요~!
    
    좋아요 버튼 숙제를 하는 중에 증가만 되는게 아닌 false 일 때는 + 1 아닐때는 - 1 이 되게 만들고 싶은데
    let [like, setLike] = useState([0, 3, 5]);
    let [chkLike, setChkLike] = useState([false, false, false]);
    
    function changeLike(idx){
    
        let isLikeChk = [...chkLike][idx];
        let isLikeFalse = isLikeChk == false;
    
        let isLiked = [...like][idx];
        
        console.log(isLiked );
       // 확인 시 첫번째 게시물 0 / 두번째 : 3 / 세번째 : 5 순서에 맞게 잘 나오는데
       setLike(isLikeFalse ? isLiked  + 1 : isLiked - 1);
       setChkLike(!isLikeFalse);
      // 이런식으로 만들어서 버튼 클릭 시  chkLike is not iterable 라고 뜹니다.. 왜그러는 걸까요..?
    }
    예제.map( (item, idx) => {
        <button type="button" onclick={ ()=> { changeLike(idx) } }>
    });
    
    
    
    
    
    
     
    #107991

    codingapple
    키 마스터
    state변경함수들에 array넣어야할거같은데 숫자나 false 하나만 집어넣고있군요
    #123546

    베니
    참가자
    안녕하세요.. 그동안 강의를 듣지 못하다가
    다시 듣기 시작했습니다.
    const [useTitle, setTitle] = useState(["산본 국수 맛집", "안산 곱창 맛집", "서울 고기 맛집"]);
    const [useLike, setLike] = useState(new Array(useTitle.length).fill(0));
        useEffect ( () => {
            const likeBtn = document.querySelectorAll('.btn.like');
            let newLike = [...useLike];
            likeBtn.forEach( (item, idx) => {
                 item.onclick = () => {
                    newLike[idx] = newLike[idx] + 1;
                    //console.log(newLike[idx]);
                    setLike(newLike[idx]);
                 };
            });
            
        }, []);
    html 마크업
    {
                                useTitle.map( (item, idx) => {
                                    return(
                                        <li key={idx}>
                                            <div className="text-wrap">
                                                <h3 className="title">
                                                    {item} {idx}
                                                </h3>
                                                <button className='btn like'> 좋아용 {[idx]} </button>
                                                <span className='like-up'> { useLike[idx]} </span>
                                            </div>
                                       

                                    );                             })                         }

    이였을 때
    클릭 시 .like-up {useLike[idx]} 이 빈값으로 변경 되는 문제가 있어서요!
    콘솔로 찍을 때는 잘 올라는게 보입니다!!
    
    function LikeUp(idx){
            let newLike = [...useLike];
            newLike[idx] += 1;
            setLike(newLike);   
      }
    추가로 함수로 만들어 onClick={ () => { Likeup(idx) } } 을 했을 때는 너무 잘됩니당..
    
    
    
     
    • 이 답변은 베니에 의해 1 년, 1 월 전에 수정됐습니다. 이유: 추가 사항
    #123576

    codingapple
    키 마스터
    setLike()에는 array집어넣어야하는데 숫자하나 넣고있는듯요 
    리액트쓰면 이벤트리스너는 굳이 필요없습니다
    #123651

    베니
    참가자
    그렇군요...ㅠㅜ 감사합니다!!!
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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