지영이의 개발 블로그

React 기초(2)-Component Modal 본문

React/React기초

React 기초(2)-Component Modal

이지영 2022. 5. 16. 11:01

Component

반복해서 출현하는 HTML or 긴HTML을 한 단어로 깔끔하게 치환해서 넣을 수 있는 방법.

1. function을 이용해서 함수를 하나 만들어준다. ( function App(){}내부에 만들면 x)

2. 그함수 return () 에 축약을 원하는 html을 담는다.

3.원하는 곳에서 <함수명></함수명> or <함수명/>을 사용하면 축약한 html이 나옴!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function App (){
  return (
    <div>
      (생략)
      <Modal></Modal>
    </div>
  )
}
 
function Modal(){
  return (
    <div className="modal">
      <h4>제목</h4>
      <p>날짜</p>
      <p>상세내용</p>
    </div>
  )
}
cs

컴포넌트는 state를 가져다쓸 때 문제가 생긴다

즉 A함수에 있던 변수는 B함수에서 맘대로 가져다 쓸 수 없음!

=>props라는 문법을 이용해 state를 <Modal>까지 전해줘야 비로소 사용가능 함

https://jssq2468.tistory.com/21?category=1009623 <<<<<porps로 이동 

 

동적인 UI 만들기

동적인 UI란 유저가 조작시 형태가 바뀌는 모달창 탭 서브메뉴 툴팁 경고문 등 그런 UI들을 의미합니다. 

 

 응용1)글제목을 누르면 모달창을 띄우게 하기

-JSX { } 안에 if문은 쓸 수 없습니다. if 대신에 삼항연산자를 쓸 수 있습니다.

-리액트에선 UI를 만들 때 state데이터를 이용합니다.
 state로 UI 보임/ 안보임 스위치를 넣음

 

1
2
3
4
5
6
7
8
9
10
11
12
13
function App (){
 
  let [modal, setModal] = useState(false);
  return (
    <div>
      (생략)
      <button onClick={ ()=>{ setModal(true) } }> {글제목[0]} </button>
      { 
         modal == true ? <Modal></Modal> : null
      }
    </div>
  )
}
cs

=>글제목을 누르면 modal 이라는 state를 true로 바꿔주겠다. 그리고 modal 이true이면 모탈창을 열어주고 아니면 null을 호출하겠다.

 

응용2)응용 1에서 글제목을 한번더 누르면 모달창이 닫히게 하기

지금 state가 true면 setModal(false)

지금 state가 false면 setModal(true)가 되도록 하면 되겠구나!

1
2
3
4
5
6
7
8
9
10
11
12
function App (){
 
  let [modal, setModal] = useState(false);
  return (
    <div>
      (생략)
      <button onClick={ ()=>{ setModal(!modal) } }> {글제목[0]} </button>
      { 
         modal == true ? <Modal></Modal> : null
      }
    </div>
  )
cs

=> ! 를 사용해서 modal의 값을 반대로 바꿔준다

!true를 출력해보면 false

!false를 출력하면 true

 

'React > React기초' 카테고리의 다른 글

React 기초 ( 6 )- Bootstrap  (0) 2022.05.20
react 기초( 5 ) - input  (0) 2022.05.19
react 기초(4) -props  (0) 2022.05.19
React 기초( 3 ) - map👍  (0) 2022.05.18
React 기초(1)-JSX  (0) 2022.05.14
Comments