React 条件渲染
在 React 中,条件渲染是一种常见的需求。根据不同的条件,我们可能需要渲染不同的组件或者元素。React 提供了多种方式来实现条件渲染,包括 JavaScript 的 if/else 语句、三元运算符以及逻辑与运算符&&等。
React 条件渲染
1. 使用 JavaScript 的 if/else 语句
我们可以在 render 方法中使用 if/else 语句来根据条件返回不同的组件或元素。例如:
javascript
// 案例: 1. IF 判断
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <h1>欢迎回来!</h1>;
}
return <h1>请先注册。</h1>;
}
ReactDOM.render(
<Greeting isLoggedIn={true} />,
document.getElementById("app1")
);
ReactDOM.render(
<Greeting isLoggedIn={false} />,
document.getElementById("app2")
);
2. 使用三元运算符
三元运算符是另一种实现条件渲染的方式。它的语法是 condition ? true : false。例如:
javascript
// 案例: 2. 三元运算
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
{unreadMessages.length > 0 ? (
<h2>Hello! 您有 {unreadMessages.length} 条未读信息。</h2>
) : null}
</div>
);
}
ReactDOM.render(
<Mailbox unreadMessages={[{ msg: "hello" }, { msg: "world" }]} />,
document.getElementById("app2")
);
3. 使用逻辑与运算符&&
逻辑与运算符&&也可以用于条件渲染。当&&前面的表达式为 true 时,才会渲染&&后面的元素。例如:
javascript
// 案例: 3. 逻辑与运算符
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
{unreadMessages.length > 0 && (
<h2>Hello! 您有 {unreadMessages.length} 条未读信息。</h2>
)}
</div>
);
}
ReactDOM.render(
<Mailbox unreadMessages={[{ msg: "hello" }, { msg: "world" }]} />,
document.getElementById("app3")
);
4. 阻止组件渲染
在某些情况下,我们可能希望隐藏某个组件,即使它被其他组件渲染。这时,可以让 render 方法返回 null。例如:
javascript
// 案例: 4. 阻止组件渲染
function WarningBanner(props) {
if (!props.warn) {
return null;
}
return <div className="warning">警告!</div>;
}
ReactDOM.render(<WarningBanner warn={true} />, document.getElementById("app3"));
以上就是 React 中实现条件渲染的几种常见方式。
代码与演示
1. 全部代码
点击查看代码
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>test-react-jsx</title>
<!-- <script src="https://cdn.staticfile.org/react/18.0.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/18.0.0/umd/react-dom.development.js"></script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script> -->
<script src="./react.js"></script>
<script src="./react-dom.js"></script>
<script src="./babel.js"></script>
</head>
<body>
<div id="app1-true"></div>
<div id="app1-false"></div>
<div id="app2"></div>
<div id="app3"></div>
<div id="app4"></div>
<div id="app5"></div>
<script type="text/babel">
(function () {
// 案例: 1. IF 判断
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <h2>欢迎回来!</h2>;
}
return <h2>请先注册。</h2>;
}
ReactDOM.render(
<Greeting isLoggedIn={true} />,
document.getElementById("app1-true")
);
ReactDOM.render(
<Greeting isLoggedIn={false} />,
document.getElementById("app1-false")
);
})();
</script>
<script type="text/babel">
(function () {
// 案例: 2. 三元运算
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
{unreadMessages.length > 0 ? (
<h2>Hello! 您有 {unreadMessages.length} 条未读信息。</h2>
) : null}
</div>
);
}
ReactDOM.render(
<Mailbox unreadMessages={[{ msg: "hello" }, { msg: "world" }]} />,
document.getElementById("app2")
);
})();
</script>
<script type="text/babel">
(function () {
// 案例: 3. 逻辑与运算符
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
{unreadMessages.length > 0 && (
<h2>Hello! 您有 {unreadMessages.length} 条未读信息。</h2>
)}
</div>
);
}
ReactDOM.render(
<Mailbox unreadMessages={[{ msg: "hello" }, { msg: "world" }]} />,
document.getElementById("app3")
);
})();
</script>
<script type="text/babel">
(function () {
// 案例: 4. 阻止组件渲染
function WarningBanner(props) {
if (!props.warn) {
return null;
}
return <div className="warning">警告!</div>;
}
ReactDOM.render(
<WarningBanner warn={true} />,
document.getElementById("app3")
);
})();
</script>
</body>
</html>
2. 案例演示
test-react-if.html 资源加载中...