Notice
Recent Posts
Recent Comments
Link
프로그래밍 공부방
[React] 메뉴 클릭에 따라 특정 화면만 변경하기 본문
메뉴를 클릭할 때마다 전체 페이지가 이동해서 바뀌는 것이 아니라
특정 화면만 바뀌도록 만들어보겠습니다 ~.~
아래 이미지가 완성된 결과물입니다.

코드 설명
우선 메뉴 클릭에 따라 보여줄 html 코드를 한 파일에 다 짜기에는 너무 길기 때문에 나눠줍니다.
저는 메뉴별로 js파일로 나누어서 따로 저장했습니다.
그리고 이 파일들을 import로 불러옵니다.
import Own_contents from "./own_contents"; // 내가 쓴 글 메뉴 파일
import Like_contents from './like_contents'; // 좋아요한 글 메뉴 파일
메뉴를 클릭할 때 userState로 만든 change변수의 값을 변경합니다.
let [change, setChange] = useState('own_contents');
<li>
<p onClick={ () => { setChange('own_contents') } }>내가 쓴 글</p>
</li>
<li>
<p onClick={ () => { setChange('like_contents') } }>좋아요한 글</p>
</li>
<li>
<p onClick={ () => { setChange('plant_album'); } }>내 식물앨범</p>
</li>
위에서 바꾼 change 변수값에 따라서 return할 값을 정해줍니다.
return문 안에서 따로 분리해둔 컴포넌트 파일을 불러옵니다.
이렇게 하면 변수값이 바뀔 때마다 return문이 달라지기 때문에 각 메뉴에 따라 화면을 바꿀 수 있습니다!
function menu_component() {
if ( change === 'own_contents') {
return(
<>
<Own_contents></Own_contents>
</>
)
} else if ( change === 'like_contents') {
return(
<>
<Like_contents></Like_contents>
</>
)
} else {
return(
<>
<Like_contents></Like_contents> { /*식물 앨범 메뉴는 아직 제작을 못해서 다른 파일로... */ }
</>
)
}
}
리액트 컴포넌트의 return문 안에서 위에서 만든 menu_component() 함수를 불러옵니다.
이렇게 하면 <div></div>내에서 menu_component함수의 return값을 보여줄 수 있습니다.
return(
<>
{/* 위 메뉴 클릭에 따라 달라지는 화면 구현 */}
<div>
{menu_component()}
</div>
</>
);
최종코드
/* user_info.js */
import React, { useState, useEffect } from 'react';
import Own_contents from "./own_contents"; // 내가 쓴 글 메뉴 파일
import Like_contents from './like_contents'; // 좋아요한 글 메뉴 파일
function User_info() {
// 현재 menu_component의 상태를 설정하는 변수
let [change, setChange] = useState('own_contents');
function menu_component() {
if ( change === 'own_contents') {
return(
<>
<Own_contents></Own_contents>
</>
)
} else if ( change === 'like_contents') {
return(
<>
<Like_contents></Like_contents>
</>
)
} else {
return(
<>
<Like_contents></Like_contents> { /*식물 앨범 메뉴는 아직 제작을 못해서 다른 파일로... */ }
</>
)
}
}
useEffect(() => { menu_component(); }, [change])
return(
<>
<div>
<div className='menu'>
<ul className='menu_list'>
<li>
<p onClick={ () => { setChange('own_contents') } }>내가 쓴 글</p>
</li>
<li>
<p onClick={ () => { setChange('like_contents') } }>좋아요한 글</p>
</li>
<li>
<p onClick={ () => { setChange('plant_album'); } }>내 식물앨범</p>
</li>
</ul>
</div>
{/* 위 메뉴 클릭에 따라 달라지는 화면 구현 */}
<div>
{menu_component()}
</div>
</div>
</>
);
}
export default User_info;
'프론트엔드 > React' 카테고리의 다른 글
[React] useEffect VS useLayoutEffect 비교 (0) | 2023.03.25 |
---|---|
[React] 환경변수를 설정했는데 undefined가 뜰 때 (0) | 2023.03.25 |
[React] 프론트엔드에서 CORS 에러 해결하기(Proxy 이용) (0) | 2023.03.23 |
[React] 글 목록 출력에 페이징 추가 (0) | 2022.08.13 |
[React] 페이지에 따라 헤더/네비게이션바 색 변경 (props 사용법) (0) | 2022.08.02 |