React中的條件渲染

條件渲染很多時候都是在state里面設(shè)置變量,一般為布爾值,然后由這個布爾值來控制頁面的隱藏與顯示。常見的應(yīng)用場景:

  • 對視圖的條件進(jìn)行切換
  • 做缺省值

Case1

父元素控制子元素的顯示,通過改變className來進(jìn)行改變,需要注意在className中添加多個類名的方法

import React from 'react';

//父元素控制子元素的顯示
export default class App extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
      isActive: true
    }
  }

  changeShow = () => {
    this.setState({
      isActive: !this.state.isActive
    })
  }

  render() {
    return (
      <div>
        <button onClick={this.changeShow}>控制子元素顯示</button>
        <Child isActive={this.state.isActive} />
      </div>
    )
  }
}

class Child extends React.Component {

  render() {
    let strClass = null;
    if (this.props.isActive) {
      // 在這邊設(shè)置空格
      strClass = ' active'
    } else {
      strClass = ""
    }
    return (
      <div className={"content" + strClass}>
        <h1>我是子元素</h1>
      </div>
    )
  }
}

Case2

import React from "react";

export default class IfDemo extends React.Component {
  /**
   * 常見的應(yīng)用場景:
   * 1.對視圖的條件進(jìn)行切換
   * 2.做缺省值
   */

  constructor(props) {
    super(props);
    this.state = {
      isLogin: false,
      names: ["ime"],
    };
  }

  clickHandle = () => {
    this.setState({
      isLogin: true,
    });
  };
  
  render() {
    const { names } = this.state;
    let showView = this.state.isLogin ? <div>iwen</div> : <div>請登陸</div>;
    return (
      <div>
        條件渲染{showView}
        <button onClick={this.clickHandle}>登錄</button>
        {names.length > 0 ? (
          <div>
            {names.map((element, index) => {
              return <p key={index}>{element}</p>;
            })}
          </div>
        ) : (
          <div>等待數(shù)據(jù)</div>
        )}
      </div>
    );
  }
}

Case3

import React, { Component } from 'react'

//函數(shù)組件
function UserGreet(props) {
  return <h1>歡迎登陸</h1>
}

function UserLogin(props) {
  return <h1>請先登陸</h1>
}

export default class App5 extends Component {

  constructor(props) {
    super(props)
    this.state = {
      isLogin: false
    }
  }

  render() {
    let element = null
    if (this.state.isLogin) {
      element = <UserGreet />
    } else {
      element = <UserLogin />
    }
    return (
      <div>
        <h1>這是頭部</h1>
        {element}
        <h1>這是三元運算符</h1>
        {this.state.isLogin ? <UserGreet /> : <UserLogin />}
        <h1>這是尾部</h1>
      </div>
    )
  }
}

3種不同方式渲染組件

import React, { Component } from 'react'

function UserGreeting(props) {
  return (
    <p>歡迎{props.username}</p>
  )
}

function GuestGreeting(props) {
  return (
    <p>請登陸!</p>
  )
}

export default class Greeting extends Component {

  constructor(props) {
    super(props)
    this.state = {
      isLogin: true
    }
  }

  render() {
    let greeting = <GuestGreeting />
    if (this.state.isLogin) {
      greeting = <UserGreeting username="ha" />
    }
    return (
      <div>
        <h3>1.最基本的通過if實現(xiàn)的條件渲染</h3>
        {greeting}
        <h3>2.通過三元運算符實現(xiàn)條件渲染</h3>
        {this.state.isLogin ? <UserGreeting username="la" /> : <GuestGreeting />}
        <h3>3.通過&&實現(xiàn)條件渲染</h3>
        {
          this.state.isLogin && <UserGreeting username="he" />
        }
        {
          this.state.isLogin || <GuestGreeting />
        }
      </div>
    )
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • React 中的條件渲染有以下幾種方式: if 語句 三元操作符(ternary operator) 邏輯 && ...
    JamesSawyer閱讀 12,806評論 3 6
  • 條件渲染 Vue:設(shè)置show-if屬性 React:使用JavaScript操作符來創(chuàng)建渲染當(dāng)然狀態(tài)的元素,并讓...
    lijia069閱讀 617評論 0 0
  • 條件渲染1:render函數(shù)里寫判斷 2:與運算符 && 3:三目運算符 和 4:阻止組件渲染
    不再猶豫_c61b閱讀 825評論 0 0
  • React簡介 React是一個用于構(gòu)建用戶界面的JavaScript庫,主要有以下幾個特點: 聲明式設(shè)計--Re...
    紫諾_qiu閱讀 944評論 0 2
  • 插件的需求 我們寫代碼,并不是所有的業(yè)務(wù)或者邏輯代碼都要抽出來復(fù)用。首先,我們得看一下是否需要將一部分經(jīng)常重復(fù)的代...
    心淡然如水閱讀 404評論 0 0

友情鏈接更多精彩內(nèi)容