[소플의 처음 만난 리액트] 9장 실습문제
이 포스트는 조건부 렌더링과 useState 훅을 활용하여 로그인 여부에 따라 툴바와 텍스트를 렌더링하는 방법을 소개합니다.
Jan 02, 2024
Cnt.jsx
import React, { useState } from "react"; function Cnt() { const [count, setCount] = useState(0); const increaseCount = () => { // 동일한 표현법 setCount(count+1); // setCount((prevCount) => prevCount + 1); } return ( <div> {count ? <h1>현재 카운트: {count}</h1> : ""} <button onClick={increaseCount}>증가</button> </div> ) } export default Cnt;
핵심 키워드
- setCount() 메서드를 통해 count의 수치를 변경할 때 count++라고 입력하면 오류가 발생한다.
- 에러가 발생하는 이유는 count를 const로 선언했기 때문이다. count++는 count=count+1 과 같은 식으로 표현할 수 있는데, 이는 count를 재할당 하는 것과 같기 때문에 에러가 발생한다.
Toolbar.jsx
import React from "react"; const styles = { wrapper: { padding: 16, display: "flex", flexDirection: "row", borderBottom: "1px solid grey", }, greeting: { marginRight: 8, }, }; function Toolbar(props){ const {isLoggedIn, onClickLogin, onClickLogout} = props; return( <div style={styles.wrapper}> {isLoggedIn && <span style={styles.greeting}>환영합니다!</span>} {isLoggedIn ? ( <button onClick={onClickLogout}>로그아웃</button> ) : ( <button onClick={onClickLogin}>로그인</button> )} </div> ) } export default Toolbar;
LandingPage.jsx
import React, { useState } from "react"; import Toolbar from "./Toolbar"; function LandingPage(props) { // 자식 컨테이너가 부모 컨테이너의 상태를 변경하는 구조 const [isLoggedIn, setIsloggedIn] = useState(false); const onClickLogin = () => { setIsloggedIn(true); }; const onClickLogout = () => { setIsloggedIn(false); }; return ( <div> <Toolbar isLoggedIn={isLoggedIn} onClickLogin={onClickLogin} onClickLogout={onClickLogout} /> <div style={{ padding: 16 }}>소플과 함께하는 리액트 공부!</div> {/* 만약 텍스트도 state에 영향 받게 하고싶다면? */} {/* {isLoggedIn && <div style={{ padding: 16 }}>소플과 함께하는 리액트 공부!</div>} */} </div> ); } export default LandingPage;
핵심 키워드
- 로그인 여부를 나타내는 툴바를 보면 로그인 된 상태에서는 로그아웃 버튼이, 로그아웃 된 상태에서는 로그인 버튼이 나타난다.
- 해당 기능을 구현하기 위해 useState() 훅을 이용한다.
결론!
조건부 렌더링과 인라인 조건, 컴포넌트 렌더링을 막는 방법을 익힐 수 있었다.
Share article