跳至主要內容

条件渲染

XinYang's Blog大约 3 分钟React

了解React中的条件渲染

通过值返回不同的组件

查看示例代码
class
import React from "react";
export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      isShow: true, //可以手动更改这个值来改变return返回的组件
    };
  }
  render() {
    const { isShow } = this.state;
    if (isShow) {
      return <div style={{ background: "pink", color: "#fff" }}>true时显示这个组件</div>;
    } else {
      return <div style={{ background: "purple", color: "#fff" }}>false时显示这个组件</div>;
    }
  }
}

通过变量的值显示不同的组件

查看示例代码
class
import React from "react";

class LogoutBtn extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return <button onClick={this.props.onClick}>退出</button>;
  }
}

class LoginBtn extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <button onClick={this.props.onClick}>登录</button>;
  }
}

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      isLogin: false,
    };
  }
  handleLogout() {
    this.setState({
      isLogin: false,
    });
  }
  handleLogin() {
    this.setState({
      isLogin: true,
    });
  }
  render() {
    const { isLogin } = this.state;
    let showBtn;
    if (isLogin) {
      showBtn = <LogoutBtn onClick={this.handleLogout.bind(this)}></LogoutBtn>;
    } else {
      showBtn = <LoginBtn onClick={this.handleLogin.bind(this)}></LoginBtn>;
    }
    return (
      <div>
        <p>{isLogin ? "已登录" : "请登录"}</p>
        {showBtn}
      </div>
    );
  }
}

通过三目运算符显示不同的组件

查看示例代码
class
import React from "react";

class LogoutBtn extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return <button onClick={this.props.onClick}>退出</button>;
  }
}

class LoginBtn extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <button onClick={this.props.onClick}>登录</button>;
  }
}

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      isLogin: false,
    };
  }
  handleLogout() {
    this.setState({
      isLogin: false,
    });
  }
  handleLogin() {
    this.setState({
      isLogin: true,
    });
  }
  render() {
    const { isLogin } = this.state;
    return (
      <div>
        <p>{isLogin ? "已登录" : "请登录"}</p>
        {isLogin ? <LogoutBtn onClick={this.handleLogout.bind(this)}></LogoutBtn> : <LoginBtn onClick={this.handleLogin.bind(this)}></LoginBtn>}
      </div>
    );
  }
}

同时,也常用三目运算符控制是否显示组件,下面时一个简单示例代码:

const App = () => {
  const [isShow, setisShow] = useState(false);

  return (
    <>
      <p>{isShow ? <h2>出来啦</h2> : null}</h2>
    </>
  );
};

阻止组件渲染

查看示例代码
class
import React from "react";

class WarningBanner extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    if (!this.props.warn) {
      return null;
    }
    return <div style={{ backgroundColor: "red", color: "#fff" }}>!!!Warning</div>;
  }
}

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      showWarning: false,
    };
  }
  render() {
    const { showWarning } = this.state;
    return (
      <div>
        <WarningBanner warn={showWarning}></WarningBanner>
        <button onClick={() => this.setState({ showWarning: !showWarning })}>{showWarning ? "隐藏" : "显示"}</button>
      </div>
    );
  }
}

通过与运算符 && 判断是否显示组件

查看示例代码
class
import React from "react";

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      message: ["消息1", "消息2", "消息3"],
    };
  }
  render() {
    const { message } = this.state;

    return <div>{message.length && <p>你有{message.length}未读消息</p>}</div>;
  }
}