美文网首页react & vue & angularReact
React学习之——条件渲染(个人笔记)

React学习之——条件渲染(个人笔记)

作者: kevision | 来源:发表于2022-09-16 09:58 被阅读0次

    React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。

    if运算符


    function UserGreeting(props) {
      return <h1>Welcome back!</h1>;
    }
    
    function GuestGreeting(props) {
      return <h1>Please sign up.</h1>;
    }
    function Greeting(props) {
      const isLoggedIn = props.isLoggedIn;
      if (isLoggedIn) {
        return <UserGreeting />;
      }
      return <GuestGreeting />;
    }
    
    ReactDOM.render(
      // Try changing to isLoggedIn={true}:
      <Greeting isLoggedIn={false} />,
      document.getElementById('root')
    );
    

    与运算符 &&


    通过花括号包裹代码,你可以在 JSX 中嵌入任何表达式。这也包括 JavaScript 中的逻辑与 (&&) 运算符。它可以很方便地进行元素的条件渲染。

    function Mailbox(props) {
      const unreadMessages = props.unreadMessages;
      return (
        <div>
          <h1>Hello!</h1>
          {/* 在jsx中通过&&来判断是否展示相关内容 */}
          {unreadMessages.length > 0 &&
            <h2>
              You have {unreadMessages.length} unread messages.
            </h2>
          }
        </div>
      );
    }
    
    const messages = ['React', 'Re: React', 'Re:Re: React'];
    ReactDOM.render(
      <Mailbox unreadMessages={messages} />,
      document.getElementById('root')
    );
    

    三目运算符


    另一种内联条件渲染的方法是使用 JavaScript 中的三目运算符 condition ? true : false
    在下面这个示例中,我们用它来条件渲染一小段文本:

    render() {
      const isLoggedIn = this.state.isLoggedIn;
      return (
        <div>
          The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
        </div>
      );
    }
    

    同样的,它也可以用于较为复杂的表达式中,虽然看起来不是很直观:

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

    阻止组件渲染


    在极少数情况下,你可能希望能隐藏组件,即使它已经被其他组件渲染。若要完成此操作,你可以让 render 方法直接返回 null,而不进行任何渲染。

    function WarningBanner(props) {
      if (!props.warn) {
        return null; // return null 表示阻止渲染组件
      }
    
      return (
        <div className="warning">
          Warning!
        </div>
      );
    }
    

    在组件中返回 null 并不会影响组件的生命周期。例如,上面这个示例中,componentDidUpdate生命周期 依然会被调用。

    相关文章

      网友评论

        本文标题:React学习之——条件渲染(个人笔记)

        本文链接:https://www.haomeiwen.com/subject/xininrtx.html