zoukankan      html  css  js  c++  java
  • 8 React 条件渲染

    在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分

    React 中的条件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。

    先来看两个组件:

    function UserGreeting(props) {
      return <h1>欢迎回来!</h1>;
    }
    
    function GuestGreeting(props) {
      return <h1>请先注册。</h1>;
    }

    我们将创建一个 Greeting 组件,它会根据用户是否登录来显示其中之一:

    function Greeting(props) {
      const isLoggedIn = props.isLoggedIn;
      if (isLoggedIn) {
        return <UserGreeting />;
      }
      return <GuestGreeting />;
    }
     
    ReactDOM.render(
      // 尝试修改 isLoggedIn={true}:
      <Greeting isLoggedIn={false} />,
      document.getElementById('example')
    );

    元素变量:

    你可以使用变量来储存元素。它可以帮助你有条件的渲染组件的一部分,而输出的其他部分不会更改。

    在下面的例子中,我们将要创建一个名为 LoginControl 的有状态的组件

    它会根据当前的状态来渲染 <LoginButton /> 或 <LogoutButton />,它也将渲染前面例子中的 <Greeting />。

    在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。
    
    React 中的条件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。
    
    先来看两个组件:
    
    function UserGreeting(props) {
      return <h1>欢迎回来!</h1>;
    }
    
    function GuestGreeting(props) {
      return <h1>请先注册。</h1>;
    }
    我们将创建一个 Greeting 组件,它会根据用户是否登录来显示其中之一:
    
    function Greeting(props) {
      const isLoggedIn = props.isLoggedIn;
      if (isLoggedIn) {
        return <UserGreeting />;
      }
      return <GuestGreeting />;
    }
     
    ReactDOM.render(
      // 尝试修改 isLoggedIn={true}:
      <Greeting isLoggedIn={false} />,
      document.getElementById('example')
    );
    元素变量:
    你可以使用变量来储存元素。它可以帮助你有条件的渲染组件的一部分,而输出的其他部分不会更改。
    
    在下面的例子中,我们将要创建一个名为 LoginControl 的有状态的组件。
    
    它会根据当前的状态来渲染 <LoginButton /> 或 <LogoutButton />,它也将渲染前面例子中的 <Greeting /><!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>React 实例</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    <body>
    <div id="example"></div>
    
    <script type="text/babel">
    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;
    
    if (isLoggedIn) {
    button = <LogoutButton onClick={this.handleLogoutClick} />;
    } else {
    button = <LoginButton onClick={this.handleLoginClick} />;
    }
    
    return (
    <div>
    <Greeting isLoggedIn={isLoggedIn} />
    {button}
    </div>
    );
    }
    }
    
    function UserGreeting(props) {
    return <h1>欢迎回来!</h1>;
    }
    
    function GuestGreeting(props) {
    return <h1>请先注册。</h1>;
    }
    
    function Greeting(props) {
    const isLoggedIn = props.isLoggedIn;
    if (isLoggedIn) {
    return <UserGreeting />;
    }
    return <GuestGreeting />;
    }
    
    function LoginButton(props) {
    return (
    <button onClick={props.onClick}>
    登陆
    </button>
    );
    }
    
    function LogoutButton(props) {
    return (
    <button onClick={props.onClick}>
    退出
    </button>
    );
    }
    
    ReactDOM.render(
    <LoginControl />,
    document.getElementById('example')
    );
    </script>
    
    </body>
    </html>
    
    
     

    与运算符 &&

    可以通过用花括号包裹代码在 JSX 中嵌入任何表达式 ,也包括 JavaScript 的逻辑与 &&,它可以方便地条件渲染一个元素。

    function Mailbox(props) {
      const unreadMessages = props.unreadMessages;
      return (
        <div>
          <h1>Hello!</h1>
          {unreadMessages.length > 0 &&
            <h2>
              您有 {unreadMessages.length} 条未读信息。
            </h2>
          }
        </div>
      );
    }
     
    const messages = ['React', 'Re: React', 'Re:Re: React'];
    ReactDOM.render(
      <Mailbox unreadMessages={messages} />,
      document.getElementById('example')
    );

    在 JavaScript 中,true && expression 总是返回 expression,而 false && expression 总是返回 false

    因此,如果条件是 true&& 右侧的元素就会被渲染,如果是 false,React 会忽略并跳过它。

    三目运算符

    render() {
      const isLoggedIn = this.state.isLoggedIn;
      return (
        <div>
          {isLoggedIn ? (
            <LogoutButton onClick={this.handleLogoutClick} />
          ) : (
            <LoginButton onClick={this.handleLoginClick} />
          )}
        </div>
      );
    }

    阻止组件渲染:

    在极少数情况下,你可能希望隐藏组件,即使它被其他组件渲染。让 render 方法返回 null 而不是它的渲染结果即可实现

  • 相关阅读:
    PostgreSql开启远程连接
    Cannot resolve scoped service from root provider
    运行项目报错MSB 401 "RazorTagHelper" 任务意外失败
    win10远程共享文件夹
    Typora 快捷方式给字体设置颜色
    markdown编辑器typora支持图床的功能
    【HTML】二、HTML标签
    【HTML】一、初识HTML
    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法
    markdown语法
  • 原文地址:https://www.cnblogs.com/liufei1983/p/14505662.html
Copyright © 2011-2022 走看看