所有的demo源码:https://github.com/Ching-Lee/react-base
在React中你可以封装不同的组件,然后根据需要,渲染其中的部分。
1.if else
demo08
![](https://img.haomeiwen.com/i8521343/9786382a7a04068e.png)
点击按钮后
![](https://img.haomeiwen.com/i8521343/a97c0b24dff2febf.png)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Conditional Rendering</title>
<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<script type="text/babel">
//登录用户使用的组件
class UserGreeting extends React.Component {
constructor(props) {
super(props);
}
render() {
return <h1>Welcome back!</h1>
}
}
//未登录用户使用的组件
class GuestGreeting extends React.Component {
constructor(props) {
super(props);
}
render() {
return <h1>Please sign up</h1>
}
}
//将上面两个组件组成一个父组件
class Greeting extends React.Component {
constructor(props) {
super(props);
}
render() {
if (this.props.isLoggedIn) {
return <UserGreeting/>
}
return <GuestGreeting/>
}
}
//登录按钮
class LoginButton extends React.Component {
constructor(props) {
super(props);
}
//要记得在这里定义onclick事件,否则父组件无法触发
render() {
return <button onClick={this.props.onclick}>Login</button>;
}
}
//注销按钮
class LogoutButton extends React.Component {
constructor(props) {
super(props);
}
//要记得在这里定义onclick事件,否则父组件无法触发
render() {
return <button onClick={this.props.onclick}>Logout</button>;
}
}
//按钮父组件
class LoginControl extends React.Component {
constructor(props) {
super(props);
this.state = {isLoggedIn: false};
this.handleLoginClick=this.handleLoginClick.bind(this);
this.handleLogoutClick=this.handleLogoutClick.bind(this);
}
handleLoginClick(){
this.setState({isLoggedIn:true});
}
handleLogoutClick(){
this.setState({isLoggedIn: false});
}
render() {
let button=null;
if (this.state.isLoggedIn) {
button = <LogoutButton onclick={this.handleLogoutClick}/>
} else {
button = <LoginButton onclick={this.handleLoginClick}/>
}
return (
<div>
<Greeting isLoggedIn={this.state.isLoggedIn}/>
{button}
</div>
);
}
}
ReactDOM.render(<LoginControl/>,document.body);
</script>
</body>
</html>
2.true&&expression
在js中true&&expression的值为expression。
false&&expression的值为false
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
</div>
);
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById('root')
);
3.true?express1 :express 2
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
{isLoggedIn ? (
<LogoutButton onClick={this.handleLogoutClick} />
) : (
<LoginButton onClick={this.handleLoginClick} />
)}
</div>
);
}
4.阻止组件显示,只要返回null
function WarningBanner(props) {
//如果warn值为false,不显示
if (!props.warn) {
return null;
}
return (
<div className="warning">
Warning!
</div>
);
}
class Page extends React.Component {
constructor(props) {
super(props);
this.state = {showWarning: true}
this.handleToggleClick = this.handleToggleClick.bind(this);
}
handleToggleClick() {
this.setState(prevState => ({
showWarning: !prevState.showWarning
}));
}
render() {
return (
<div>
<WarningBanner warn={this.state.showWarning} />
<button onClick={this.handleToggleClick}>
{this.state.showWarning ? 'Hide' : 'Show'}
</button>
</div>
);
}
}
ReactDOM.render(
<Page />,
document.getElementById('root')
);