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

home2 게시판 React 게시판 state 수정 함수를 활용

state 수정 함수를 활용

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

    조승현
    참가자
    안녕하세요 선생님
    state 변경 함수 관련하여 궁금한게 있어 질문 드립니다.
    
    state 수정 함수를 활용하여 변경을 진행하고 난 뒤 state 변경 함수 아래에서 해당 state를 콘솔 찍으면 수정하기 이전의
    값이 찍힙니다.(제가 수정한 값보다 1이 낮은 값이 찍힙니다.)
    
    ex) 아래 코드 중 제가 임의로 id state를 만들어서 h4 타이틀을 클릭하면 setId(i)로 map의 파라미터 인자를 활용하여 id 값을
    변경해주었는데, app 컴포넌트 밖의 다른 컴포넌트에서는 해당 id 값이 즉각적으로 잘 찍히는거 같은데 map 함수 안에서 콘솔을
    찍거나 if 조건문을 활용하면 id 값이 항상 이전 값으로 찍히고 있어 원인이 궁금하여 질문 드립니다.
    
    
    import logo from './logo.svg';
    import './App.css';
    import { useState } from 'react';
    function Modal(props){
      let title = null;
      for(let i=0;i<props.title.length;i++){
        if(i==props.id){
          title = props.title[i];
        }
      }
      return(
        <div className="modal">
            <h4>{title}</h4>
            <p>날짜</p>
            <p>상세내용</p>
            <button>글수정</button>
        </div>
      )
    }
    function App() {
      let post = '강남 우동 맛집';
      let [title, setTitle] = useState(['남자코트 추천', '강남 우동맛집', '파이썬독학']);
      let [따봉, 따봉변경] = useState([]);
      const [modal, setModal] = useState(false);
      const [id, setId] = useState(0);
      const [num, setNum] = useState(0);
      return (
        <div className="App">
          <div className="black-nav">
            <h4>블로그임</h4>
          </div>
          <button onClick={ function(){
            const copy = [...title];
            copy.sort();
            setTitle(copy);
          } }>가나다순정렬</button>
          {
            title.map(function(a,i){
              return(
                <div key={i} className="list">
                  <h4 onClick={(e)=>{
                    setId(i);
                    console.log(id)
                    if(e.target){
                      setId(i);
                      setModal(true);
                      if(id == i){
                        setModal(false)
                      }
                    }
                  }}>{ a } <span onClick={
                    (e)=>{
                      let copy = [...따봉];
                        if(따봉[i] == null){
                          copy[i] = 1;
                          따봉변경(copy);
                          console.log(따봉);
                        } else{
                          copy[i] = 따봉[i] + 1;
                          따봉변경(copy);
                          console.log(따봉);
                        }
                    }
                  }>👍 {따봉[i]}</span></h4>
                  <p>2월 18일 발행</p>
                </div>
              )
            })
          }
          {modal === true ? <Modal title={title} id={id}/> : null}
        </div>
      );
    }
    export default App;
     
    #47311

    codingapple
    키 마스터
    state변경함수는 다른코드보다 늦게처리되어서 그거 밑의코드가 먼저 실행됩니다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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