티스토리 뷰
오늘은 글 제목을 클릭하면 제목에 따라 모달창이 바뀌는 기능을 구현하는 것을 이해해보겠습니다.
[결과물]
> '강남 우동 맛집' 을 클릭하면 하단 모달의 남자코트 추천이 강남 우동 맛집으로 바뀐다.
# code
사용자가 제목을 클릭하면 모달창의 제목이 클릭된 제목으로 변한다.
key ★ 모달창의 제목을 동적인 UI로 생각한다.
1. 먼저 모달 컴포넌트를 생성한다.
// 모달 컴포넌트
const Modal = () => {
return(
<div className='modal'>
<h4> 제목 넣을 곳 </h4>
<h4>나이: 25세</h4>
<h4>직업: 학생</h4>
<button>글수정</button>
</div>
)
}
2. 모달 컴포넌트에 전달할 제목을 state로 저장한다.
const [title, setTitle] = useState(['남자 코트 추천', '강남 우동 맛집', '파이썬 독학']);
const [titleIndex, setTitleIndex] = useState(0);
titleIndex는 제목들의 배열을 가져오기 위해서 0으로 선언해 놓는다.
3. 모달의 on/off를 설정한다.
const [onModal, setOnModal] = useState(false);
4. 삼항 연산자를 이용해서 onModal의 상태에 따라 모달창을 동적으로 관리한다.
{
onModal === true
? <Modal/>
: null
}
5. 글제목 list를 생성하고, onClick 이벤트를 이용해서 state를 변경한다.
// App 컴포넌트
title.map(function(v,i){
return(
<div className="list">
<h4 onClick={() => {setOnModal(!onModal)}}>{v}</h4>
</div>
)
})
map()을 이용해서 제목 list를 만들어주고, onClick이벤트로 onModal의 상태를 변경해준다.
6. 제목 클릭 시 바뀌는 index값을 Modal 컴포넌트에 전송해주기 위해서 props로 state를 전송해준다.
// App 컴포넌트
// 제목 클릭 시 제목의 index 변경
title.map(function(v,i){
return(
<div className="list">
<h4 onClick={() => {setOnModal(!onModal); setTitleIndex(i)}}>{v}</h4>
</div>
)
})
// Modal 컴포넌트로 props 연동하기
{
onModal === true
? <Modal title={title} setTitle={setTitle} titleIndex={titleIndex}/>
: null
}
7. 받아온 글제목과 글제목 index를 이용해서 Modal 컴포넌트의 제목을 변경한다.
// 모달 컴포넌트
// props 연동 후 데이터 바인딩
const Modal = (props) => {
return(
<div className='modal'>
<h4> {props.title[props.titleIndex]} </h4>
<h4>나이: 25세</h4>
<h4>직업: 학생</h4>
<button>글수정</button>
</div>
)
}
어렵네요!
안녕~
'React Study' 카테고리의 다른 글
[React] styled-components 사용하기 / props로 스타일 변경하기 (1) | 2022.08.08 |
---|---|
[React] react-router-dom를 이용해 세부 페이지로 이동하기 (1) | 2022.07.29 |
[React] props와 map을 이용하여 컴포넌트로 상품 목록 띄우기 (1) | 2022.07.29 |
[React] 부모 컴포넌트에서 state를 가져오고 싶을 때 - props (1) | 2022.07.14 |
[React] map() 함수 정리 (1) | 2022.07.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리액트쿼리
- 리액트댓글
- React
- 리액트이벤트
- 리액트소셜로그인
- state함수
- map함수
- 리액트hover
- 리액트 애니메이션
- 장바구니기능
- 리액트 밑줄효과
- reactQuery
- 탭만들기
- react-query
- 리액트탭버튼
- 리액트
- hover
- filter
- 리액트 filter
- API호출
- URL파라미터
- 스타일컴포넌트
- scaleX
- 리액트 카테고리
- 리액트 hover
- Props
- map
- 장바구니
- 리액트함수
- 컴포넌트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함