React中的条件渲染

条件渲染很多时候都是在state里面设置变量,一般为布尔值,然后由这个布尔值来控制页面的隐藏与显示。常见的应用场景:

  • 对视图的条件进行切换
  • 做缺省值

Case1

父元素控制子元素的显示,通过改变className来进行改变,需要注意在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) {
      // 在这边设置空格
      strClass = ' active'
    } else {
      strClass = ""
    }
    return (
      <div className={"content" + strClass}>
        <h1>我是子元素</h1>
      </div>
    )
  }
}

Case2

import React from "react";

export default class IfDemo extends React.Component {
  /**
   * 常见的应用场景:
   * 1.对视图的条件进行切换
   * 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>等待数据</div>
        )}
      </div>
    );
  }
}

Case3

import React, { Component } from 'react'

//函数组件
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实现的条件渲染</h3>
        {greeting}
        <h3>2.通过三元运算符实现条件渲染</h3>
        {this.state.isLogin ? <UserGreeting username="la" /> : <GuestGreeting />}
        <h3>3.通过&&实现条件渲染</h3>
        {
          this.state.isLogin && <UserGreeting username="he" />
        }
        {
          this.state.isLogin || <GuestGreeting />
        }
      </div>
    )
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • React 中的条件渲染有以下几种方式: if 语句 三元操作符(ternary operator) 逻辑 && ...
    JamesSawyer阅读 12,806评论 3 6
  • 条件渲染 Vue:设置show-if属性 React:使用JavaScript操作符来创建渲染当然状态的元素,并让...
    lijia069阅读 617评论 0 0
  • 条件渲染1:render函数里写判断 2:与运算符 && 3:三目运算符 和 4:阻止组件渲染
    不再犹豫_c61b阅读 825评论 0 0
  • React简介 React是一个用于构建用户界面的JavaScript库,主要有以下几个特点: 声明式设计--Re...
    紫诺_qiu阅读 946评论 0 2
  • 插件的需求 我们写代码,并不是所有的业务或者逻辑代码都要抽出来复用。首先,我们得看一下是否需要将一部分经常重复的代...
    心淡然如水阅读 404评论 0 0

友情链接更多精彩内容