7. react 中的条件渲染

1. if 条件渲染

复制代码
function UserGreeting (props) {
  return <h2>用户登录</h2>
}

function GuestGretting (props) {
  return <h2>游客登录</h2>
}

function Greeting (props) {
  const isLogin = props.isLogin
  if (isLogin) {
    return <UserGreeting />
  }
  return <GuestGretting />
}

ReactDOM.render(
  <Greeting isLogin={true} />,
  document.getElementById('root')
)
复制代码

2. 事件控制 if 条件渲染

复制代码
function UserGreeting (props) {
  return <h2>用户登录</h2>
}

function GuestGretting (props) {
  return <h2>游客登录</h2>
}

function Greeting (props) {
  const isLogin = props.isLogin
  if (isLogin) {
    return <UserGreeting />
  }
  return <GuestGretting />
}

class LoginControl extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      isLogin: false
    }
  }

  handleLoginIn () {
    this.setState({
      isLogin: true
    })
  }

  handleLoginOut () {
    this.setState({
      isLogin: false
    })
  }

  loginBtn () {
    if (this.state.isLogin) {
      return <button onClick={this.handleLoginOut.bind(this)}>退出</button>
    }
    return <button onClick={this.handleLoginIn.bind(this)}>登录</button>
  }

  render () {
    const isLogin = this.state.isLogin

    return (
      <div>
        {this.loginBtn()}
        <Greeting isLogin={isLogin} />
      </div>
    )
  }
}
ReactDOM.render(
  <LoginControl />,
  document.getElementById('root')
)
复制代码

 

3. 与运算符 && 渲染

  1. 可以在 JSX 中嵌套任何表达式

  2. true && expression 总是会返回 expression, 而 false && expression 总是会返回 false

  

复制代码
function UserGreeting (props) {
  return <h2>用户登录</h2>
}

function GuestGretting (props) {
  return <h2>游客登录</h2>
}
class LoginControl extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      isLogin: false
    }

    this.handleLoginIn = this.handleLoginIn.bind(this)
    this.handleLoginOut = this.handleLoginOut.bind(this)
  }

  handleLoginIn() {
    this.setState({
      isLogin: true
    })
  }

  handleLoginOut () {
    this.setState({
      isLogin: false
    })
  }

  render () {
    const isLogin = this.state.isLogin
    var btn = <button onClick={this.handleLoginIn}>登录</button>;
    if (isLogin) {
      btn = <button onClick={this.handleLoginOut}>退出</button>
    }
    return (
      <div>
        {btn}
        { isLogin && <UserGreeting />}  // 与运算条件渲染
      </div>
    )
  }
}
ReactDOM.render(
  <LoginControl />,
  document.getElementById('root')
)
复制代码

 

4. 三目运算渲染   condition ? true : false

  上述实例改造为三目运算渲染

复制代码
render () {
    const isLogin = this.state.isLogin
    var btn = <button onClick={this.handleLoginIn}>登录</button>;
    if (isLogin) {
      btn = <button onClick={this.handleLoginOut}>退出</button>
    }
    return (
      <div>
        {btn}
        { isLogin ? <UserGreeting /> : <GuestGretting />}   // 三目运算
      </div>
    )
  }
复制代码
posted @   monkey-K  阅读(168)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示