💎 React

JSX 안에 조건문, 반복문 쓰는 방법

ji-hyun 2021. 11. 22. 16:53

1. 조건문 쓰는 방법

 

JSX 에서 { } 안에 자바스크립트 코드를 쓸 수 있다. 하지만 if 문은 불가하다.

if 문 대신 삼항연산자JSX 안의 { } 내에서 쓰기 가능하다.

 

 

return (
    <div className="App">
      <div className="black-nav">
        <div>개발 Blog</div>
      </div>
      <button onClick={제목바꾸기}>버튼</button>
      <div className="list">
      <h3>{ 글제목[0] } <span onClick={()=> {따봉변경(따봉 + 1)}}>👍</span> {따봉}</h3>
        <p>11월 14일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[1] }</h3>
        <p>11월 15일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[2] }</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
      <Modal />

      { 1<3 ?                        // if 문 대신 삼항연산자를 써야 한다.
      console.log('맞았다'):
      console.log('틀렸다')
      }
      
    </div>

 

이렇게 작성하면 '맞았다' 가 출력된다.

 

 

 

 

 

 

 

 

 

 

return (
    <div className="App">
      <div className="black-nav">
        <div>개발 Blog</div>
      </div>
      <button onClick={제목바꾸기}>버튼</button>
      <div className="list">
      <h3>{ 글제목[0] } <span onClick={()=> {따봉변경(따봉 + 1)}}>👍</span> {따봉}</h3>
        <p>11월 14일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[1] }</h3>
        <p>11월 15일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[2] }</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
      <Modal />                    // modal 창 1개

      { 1<3 ?                      // modal 창 2개
      <Modal></Modal>:
      null
      }
    </div>
  );

 

이렇게 하니까 모달창이 두개가 뜬다.

 

 

 

 

 

 

 

 

 

리액트에서 UI 를 만들 때는 state 로 UI 보임/안보임 스위치를 넣는다.

 

 

 

 

function App() {

  let [글제목, 글제목변경] = useState(['HTML 공부하기', 'CSS 공부하기', 'Javascript 공부하기']);
  let [따봉, 따봉변경] = useState(0);

  let [modal, modal변경] = useState(true);     // 현재 modal 은 true 값을 가진다.
  
  function 제목바꾸기(){
    var newArray = [...글제목];
    newArray[0] = '여자 코트 추천';
    글제목변경(newArray);
  }
  

  return (
    <div className="App">
      <div className="black-nav">
        <div>개발 Blog</div>
      </div>
      <button onClick={제목바꾸기}>버튼</button>
      <div className="list">
      <h3>{ 글제목[0] } <span onClick={()=> {따봉변경(따봉 + 1)}}>👍</span> {따봉}</h3>
        <p>11월 14일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[1] }</h3>
        <p>11월 15일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[2] }</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
      <Modal />

      { modal===true ?      //
      <Modal></Modal>:
      null
      }
    </div>
  );
}

 

마찬가지로 모달창이 2개가 뜬다.

 

 

 

 

 

 

 

이번엔 h3 를 누르면 모달창이 보이게 할 것이다. 

이때 처음 state 값false 로 한다.

 

 

function App() {

  let [글제목, 글제목변경] = useState(['HTML 공부하기', 'CSS 공부하기', 'Javascript 공부하기']);
  let [따봉, 따봉변경] = useState(0);

  let [modal, modal변경] = useState(false);      // modal 값은 false
  
  function 제목바꾸기(){
    var newArray = [...글제목];
    newArray[0] = '여자 코트 추천';
    글제목변경(newArray);
  }
  

  return (
    <div className="App">
      <div className="black-nav">
        <div>개발 Blog</div>
      </div>
      <button onClick={제목바꾸기}>버튼</button>
      <div className="list">
      <h3>{ 글제목[0] } <span onClick={()=> {따봉변경(따봉 + 1)}}>👍</span> {따봉}</h3>
        <p>11월 14일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3>{ 글제목[1] }</h3>
        <p>11월 15일 발행</p>
        <hr />
      </div>
      <div className="list">
        <h3 onClick={()=>{modal변경(true)}}>{ 글제목[2] }</h3>   // true 로 변경
        <p>11월 16일 발행</p>
        <hr />
      </div>
      <Modal />          // 모달창 1개

      { modal===true ?     // 모달창 2개
      <Modal></Modal>:
      null
      }
    </div>
  );
}

 

h3 에 onClick 을 쓰고 그 안에 화살표 함수를 작성한다.

그리고 setState 함수인 modal변경 함수를 통해서 state 값을 true 로 바꿔준다.

그 결과 modal === true 가 되서 모달창이 2개가 뜬다.

 

 

 

이것이 전형적인 react 에서 클릭시 등장하는 UI 를 만드는 방법이다. UI 가 보임/안보임 정보를 state 로 저장해둔다.

햄버거 메뉴 같은 것도 이런 원리라고 생각하면 된다!

 

 

 

 

 

 

 

 

 

숙제) 버튼을 누르면 모달창 열림, 한번 더 누르면 닫히게 만들기

 

 

내 코드

 

let [modal, modal변경] = useState(false);


return (
<button onClick={ ()=>{ modal===true? modal변경(false) : modal변경(true) }}>버튼</button>

    {modal ===true ? 
    <Modal></Modal>:
    null}
    
    
    )

 

 

 

 

 

 

코딩애플님의 코드

 

function App (){

  let [modal, modal변경] = useState(false);
  return (
    <div>

      <button onClick={ ()=>{ modal변경(!modal) } }> 열고닫는버튼 </button>
      { 
         modal === true 
         ? <Modal />
         : null
      }
    </div>
  )
}

 

 

 

 

 


2. 반복문 쓰는 법

 

JSX 중괄호 내에 for 못 넣는다. (if 문과 마찬가지라고 생각하면 된다.)

반복문을 쓰고 싶다면은......

(중괄호는 항상 {변수명}, {함수명} 을 쓸 수 있다고 생각하면 된다.)

 

 

 

var 어레이 = [2, 3, 4];

var 뉴어레이 = 어레이.map(function(a){
	return a * 2
});

 

array 내의 모든 데이터에 똑같은 작업을 시켜주고 싶을 때 .map() 을 사용한다.

 

 

 

 

 

 

// 반복문 쓰는 법

{ 반복할 데이터.map ( function( ){

return <HTML>

} ) }

 

 

 

 

 

 

let [글제목, 글제목변경] = useState(['HTML 공부하기', 'CSS 공부하기', 'Javascript 공부하기']);

...

{  
      글제목.map(function(){              // 3번 반복한다는 뜻
        return (
        <div className="list">
        <h3>{ 글제목[2] }</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
        )
      })
    }

 

글제목의 갯수는 반복시킬 데이터 갯수와 같다. 위의 코드는 글제목 갯수가 3개이므로 3번 반복된다.

 

 

 

 

 

 

 

{
      글제목.map(function(a){
        return (
        <div className="list">
        <h3>{ a }</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
        )
      })
    }

 

 

여기서 a 는 array 안에 있던 하나하나의 데이터를 의미한다. a 대신 글이라고 생각하면 쉽다

따라서 이거 하나만 쓰면 훨씬 더 간추려 지면서 똑같은 결과를 낼 수 있다.

 

 

 

 

 

 

{
      글제목.map(function(글){
        return (
        <div className="list">
        <h3>{ 글 } <span onClick={()=> {따봉변경(따봉 + 1)}}>👍</span> {따봉}</h3>
        <p>11월 16일 발행</p>
        <hr />
      </div>
        )
      })
    }

 

다음과 같이

이벤트를 반복할 수도 있다. 하지만 누를 때마다 다음과 같은 현상이 발생한다....

 

 

 

 

 

위와 같이 누르면 따봉의 수가 같이 올라가는 현상이 발생한다.

따봉 누를 때 동시에 변경되는 이유는 따봉 state 는 한 개의 숫자인데 그걸 전부 공유하고 있기 때문이다.

 

(나중에 배워볼 것)

 

 

 

 

 

 

 

 

 

 

for 반복문을 쓰는 방법은 다음과 같다.

 

 

function 반복된UI(){
    
    var 어레이 = [];

    for(var i=0; i<3; i++){
      어레이.push(<div>안녕</div>);
    }

    return 어레이
  }
  
  
  ...
  
  
  {반복된UI()}           // 원하는 자리에 이렇게 쓰면 된다.

 

 

for 반복문을 쓰고 싶다면?

- 보통 함수 안에서 사용한다.

- array 에 HTML 추가하는 방식

 

 

function 이라는 절차가 하나 더 생겨서 약간 복잡해보이지만 이것도 많이 쓰이는 방식 중 하나이니 알아두자.

 

 

 

 

 

 

'💎 React' 카테고리의 다른 글

리액트 댓글 달기  (0) 2021.11.24
props 사용법  (0) 2021.11.22
state 와 props 개념  (0) 2021.11.21
리액트 - SPA 개념과 Routing 하는 방법  (0) 2021.11.16
리액트 개론  (0) 2021.11.16