条件渲染
大约 3 分钟
了解React中的条件渲染
通过值返回不同的组件
查看示例代码
class
import React from "react";
export default class App extends React.Component {
constructor() {
super();
this.state = {
isShow: true, //可以手动更改这个值来改变return返回的组件
};
}
render() {
const { isShow } = this.state;
if (isShow) {
return <div style={{ background: "pink", color: "#fff" }}>为true时显示这个组件</div>;
} else {
return <div style={{ background: "purple", color: "#fff" }}>为false时显示这个组件</div>;
}
}
}
hook
import { useState } from "react";
const App = () => {
const [isShow, setisShow] = useState(true); //可以手动更改这个值来改变return返回的组件
if (isShow) {
return <div style={{ background: "pink", color: "#fff" }}>为true时显示这个组件</div>;
} else {
return <div style={{ background: "purple", color: "#fff" }}>为false时显示这个组件</div>;
}
};
export default App;
通过变量的值显示不同的组件
查看示例代码
class
import React from "react";
class LogoutBtn extends React.Component {
constructor(props) {
super(props);
}
render() {
return <button onClick={this.props.onClick}>退出</button>;
}
}
class LoginBtn extends React.Component {
constructor(props) {
super(props);
}
render() {
return <button onClick={this.props.onClick}>登录</button>;
}
}
export default class App extends React.Component {
constructor() {
super();
this.state = {
isLogin: false,
};
}
handleLogout() {
this.setState({
isLogin: false,
});
}
handleLogin() {
this.setState({
isLogin: true,
});
}
render() {
const { isLogin } = this.state;
let showBtn;
if (isLogin) {
showBtn = <LogoutBtn onClick={this.handleLogout.bind(this)}></LogoutBtn>;
} else {
showBtn = <LoginBtn onClick={this.handleLogin.bind(this)}></LoginBtn>;
}
return (
<div>
<p>{isLogin ? "已登录" : "请登录"}</p>
{showBtn}
</div>
);
}
}
hook
import { useState } from "react";
const LoginBtn = props => {
return <button onClick={props.onClick}>登录</button>;
};
const LogoutBtn = props => {
return <button onClick={props.onClick}>退出</button>;
};
const App = () => {
const [isLogin, setisLogin] = useState(false);
let showBtn;
if (isLogin) {
showBtn = <LogoutBtn onClick={() => setisLogin(false)}></LogoutBtn>;
} else {
showBtn = <LoginBtn onClick={() => setisLogin(true)}></LoginBtn>;
}
return (
<>
<p>{isLogin ? "已登录" : "未登录"}</p>
{showBtn}
</>
);
};
export default App;
通过三目运算符显示不同的组件
查看示例代码
class
import React from "react";
class LogoutBtn extends React.Component {
constructor(props) {
super(props);
}
render() {
return <button onClick={this.props.onClick}>退出</button>;
}
}
class LoginBtn extends React.Component {
constructor(props) {
super(props);
}
render() {
return <button onClick={this.props.onClick}>登录</button>;
}
}
export default class App extends React.Component {
constructor() {
super();
this.state = {
isLogin: false,
};
}
handleLogout() {
this.setState({
isLogin: false,
});
}
handleLogin() {
this.setState({
isLogin: true,
});
}
render() {
const { isLogin } = this.state;
return (
<div>
<p>{isLogin ? "已登录" : "请登录"}</p>
{isLogin ? <LogoutBtn onClick={this.handleLogout.bind(this)}></LogoutBtn> : <LoginBtn onClick={this.handleLogin.bind(this)}></LoginBtn>}
</div>
);
}
}
hook
import { useState } from "react";
const LoginBtn = props => {
return <button onClick={props.onClick}>登录</button>;
};
const LogoutBtn = props => {
return <button onClick={props.onClick}>退出</button>;
};
const App = () => {
const [isLogin, setisLogin] = useState(false);
return (
<>
<p>{isLogin ? "已登录" : "未登录"}</p>
{isLogin ? <LogoutBtn onClick={() => setisLogin(false)}></LogoutBtn> : <LoginBtn onClick={() => setisLogin(true)}></LoginBtn>}
</>
);
};
export default App;
同时,也常用三目运算符控制是否显示组件,下面时一个简单示例代码:
const App = () => {
const [isShow, setisShow] = useState(false);
return (
<>
<p>{isShow ? <h2>出来啦</h2> : null}</h2>
</>
);
};
阻止组件渲染
查看示例代码
class
import React from "react";
class WarningBanner extends React.Component {
constructor(props) {
super(props);
}
render() {
if (!this.props.warn) {
return null;
}
return <div style={{ backgroundColor: "red", color: "#fff" }}>!!!Warning</div>;
}
}
export default class App extends React.Component {
constructor() {
super();
this.state = {
showWarning: false,
};
}
render() {
const { showWarning } = this.state;
return (
<div>
<WarningBanner warn={showWarning}></WarningBanner>
<button onClick={() => this.setState({ showWarning: !showWarning })}>{showWarning ? "隐藏" : "显示"}</button>
</div>
);
}
}
hook
import { useState } from "react";
const WarningBanner = props => {
if (!props.warn) return null;
return <div style={{ backgroundColor: "red", color: "#fff" }}>!!!Warning</div>;
};
const App = () => {
const [showWarning, setShowWarning] = useState(false);
return (
<>
<WarningBanner warn={showWarning}></WarningBanner>
<button onClick={() => setShowWarning(!showWarning)}>{showWarning ? "隐藏" : "显示"}</button>
</>
);
};
export default App;
通过与运算符 && 判断是否显示组件
查看示例代码
class
import React from "react";
export default class App extends React.Component {
constructor() {
super();
this.state = {
message: ["消息1", "消息2", "消息3"],
};
}
render() {
const { message } = this.state;
return <div>{message.length && <p>你有{message.length}未读消息</p>}</div>;
}
}
hook
import { useState } from "react";
const App = () => {
const [message, setMessage] = useState(["消息1", "消息2", "消息3"]);
return (
<>
<div>{message.length && <p>你有{message.length}未读消息</p>}</div>
</>
);
};
export default App;