在 React 中,你可以创建不用的组件来封装你各种行为,然后依据不用的状态,你只渲染对应状态下的部分内容
React 中的条件渲染和 JS 一样,使用 if 或者条件运算符去创建元素来表现当前的状态
function UserGreeting(props) {
return <h1>Welcome back!</h1>
}
function GuestGreeting(props) {
return <h1>Please sign up</h1>
}
在创建一个 Greeting 组件,它会依据用户是否登陆来决定显示上面哪个组件
function Greeting(props) {
const result_flag = props.flag
if (result_flag) {
return <UserGreeting />
} else {
return <GuestGreeting />
}
}
ReactDOM.render(<Greeting flag={false} />, document.getElementById('root'))
实际效果
function Greeting(props) {
const isLoggedIn = props.isLoggedIn
if (isLoggedIn) {
return <UserGreeting />
}
return <GuestGreeting />
}
class LoginControl extends React.Component {
constructor(props) {
super(props)
this.handleLoginClick = this.handleLoginClick.bind(this)
this.handleLogoutClick = this.handleLogoutClick.bind(this)
this.state = { isLoggedIn: false }
}
handleLoginClick() {
this.setState({ isLoggedIn: true })
}
handleLogoutClick() {
this.setState({ isLoggedIn: false })
}
render() {
const isLoggedIn = this.state.isLoggedIn
let button = null
if (isLoggedIn) {
button = <LogoutButton onClick={this.handleLogoutClick} />
} else {
button = <LoginButton onClick={this.handleLoginClick} />
}
return (
<div>
<Greeting isLoggedIn={isLoggedIn} />
{button}
</div>
)
}
}
ReactDOM.render(<LoginControl />, document.getElementById('example'))
与&&逻辑运算符
通过花括号包裹代码,可以在 JSX 中嵌入任何表达式,这也包括了 js 逻辑与预算符
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')
)
三目运算符
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
阻止条件渲染
在极少数的情况下 要是 render 方法直接返回 null,从而不进行任何渲染
function WarningBanner(props) {
if (!props.warn) {
return null
}
return <div className="warning">Warning!</div>
}
总结
- class 外面可以写方法传进来 props,渲染
- if 判断