반응 조건부 렌더링
22158 단어 react
If 문을 사용한 조건부 렌더링
항목 목록이 있고 목록이 존재할 때만 표시하려는 경우 다음과 같이 렌더링할 수 있습니다.
const App = ({ list }) => {
if (!list) {
return null
}
return (
<ul>
{list.map(item => (
<li key={item.name}>{item.name}</li>
))}
</ul>
)
}
export default App
아래와 같이 다른 방식으로 작성할 수도 있습니다.
const App = ({ list }) => {
if (list) {
return (
<ul>
{list.map(item => (
<li key={item.name}>{item.name}</li>
))}
</ul>
)
}
return null
}
export default App
if-else 문을 사용한 조건부 렌더링
위의 예에서 목록이 비어 있을 때 사용자에게 메시지를 표시하려면 if-else 문을 사용하여 메시지를 표시할 수 있습니다.
const App = ({ list }) => {
if (!list) {
return null
}
if (list.length === 0) {
return <div>List is empty</div>
} else {
return (
<ul>
{list.map(item => (
<li key={item.name}>{item.name}</li>
))}
</ul>
)
}
}
export default App
가독성을 높이기 위해 if 문을 사용하여 위의 예를 작성할 수도 있습니다.
const App = ({ list }) => {
if (!list) {
return null
}
if (list.length === 0) {
return <div>List is empty</div>
}
return (
<ul>
{list.map(item => (
<li key={item.name}>{item.name}</li>
))}
</ul>
)
}
export default App
삼항 연산자를 사용한 조건부 렌더링
ternary operator을 사용하여 다음과 같이 조건부 렌더링을 단순화할 수 있습니다.
const App = ({ isLoggedIn }) => {
return isLoggedIn ? <button>Logout</button> : <button>Login</button>
}
export default App
여러 줄의 요소를 렌더링해야 하는 경우 괄호() 안에 줄 바꿈할 수 있습니다.
const App = ({ isLoggedIn }) => {
return isLoggedIn ? (
<>
<ShowWelcomeMessage />
<button>Logout</button>
</>
) : (
<button>Login</button>
)
}
export default App
단락 && 연산자를 사용한 조건부 렌더링
특정 조건이 충족되었을 때 무언가를 표시하고 조건이 실패했을 때 아무 것도 렌더링하고 싶지 않을 때 && 연산자가 가장 좋은 친구입니다.
const App = ({ isLoading }) => {
return isLoading && <div>Loading...</div>
}
export default App
&&와 함께 여러 조건을 묶을 수 있습니다.
const App = ({ isLoggedIn, balance }) => {
return isLoggedIn && balance === 0 && <div>Please recharge your account</div>
}
export default App
switch 문을 사용한 조건부 렌더링
표현식에 대해 두 개 이상의 출력이 있는 경우 if-else 래더 대신 switch 문을 사용할 수 있습니다.
const App = ({ status, message }) => {
switch (status) {
case "info":
return <Info message={message} />
case "warning":
return <Warning message={message} />
case "error":
return <Error message={message} />
default:
return null
}
}
export default App
JSX 내부에 switch 문을 포함하려면 즉시 호출되는 함수 표현식( IIFEs )을 사용할 수 있습니다.
const App = ({ status, message }) => {
return (
<div>
{(() => {
switch (status) {
case "info":
return <Info message={message} />
case "warning":
return <Warning message={message} />
case "error":
return <Error message={message} />
default:
return null
}
})()}
</div>
)
}
export default App
다중 조건부 렌더링 사용
아래와 같이 JavaScript 객체를 사용하여 위의 스위치 케이스 예제를 작성할 수 있습니다.
const App = ({ status, message }) => {
return (
<div>
{
{
info: <Info message={message} />,
warning: <Warning message={message} />,
error: <Error message={message} />,
}[status]
}
</div>
)
}
export default App
여기서 상태는 정보, 경고 및 오류의 3가지 값 중 하나를 가질 수 있습니다. 상태 값에 따라 해당 구성 요소가 렌더링됩니다.
중첩 조건부 렌더링
삼항 연산자를 사용하여 여러 조건을 중첩할 수 있습니다.
const App = ({ isLoggedIn, posts }) => {
return (
<div>
{isLoggedIn ? (
posts.length === 0 ? (
<AddPost />
) : (
<ShowPosts />
)
) : (
"Please login"
)}
</div>
)
}
export default App
여기에서 사용자가 로그인했는지 확인하고 로그인한 경우 사용자에게 게시물이 있는지 확인합니다. 게시물이 없으면 추가하도록 요청하고 게시물이 있으면 게시물을 표시합니다. 사용자가 로그인하지 않은 경우 로그인을 요청합니다.
이러한 유형의 중첩은 가독성을 저해하므로 권장하지 않습니다. 중첩 조건이 있는 경우 항상 여러 구성 요소로 분할합니다.
const App = ({ isLoggedIn, posts }) => {
return <div>{isLoggedIn ? <Posts posts={posts} /> : "Please login"}</div>
}
const Posts = ({ posts }) => {
return posts.length === 0 ? <AddPost /> : <ShowPosts />
}
Reference
이 문제에 관하여(반응 조건부 렌더링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/collegewap/react-conditional-rendering-cdb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)