美文网首页
JSX 中内联条件渲染的方法

JSX 中内联条件渲染的方法

作者: Kevin丶CK | 来源:发表于2019-04-22 17:30 被阅读0次

    在 React 中,可以创建不同的组件来封装各种你需要的行为。然后,依据应用的不同状态,只渲染对应状态下的部分内容。
    React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。if 语句进行条件渲染是不错的方式,但有时你可能会想使用更为简洁的语法。接下来,我们将介绍几种在 JSX 中内联条件渲染的方法。

    1、与运算符 &&

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

     <script type="text/babel">
          function Mailbox(props) {
            const unreadMessages = props.unreadMessages;
            const readedMessages = props.readedMeaasges;
            return (
              <div>
                <h1>Hello!</h1>
                {unreadMessages.length > 0 && (
                  <h2>You have {unreadMessages.length} unread messages.</h2>
                )}
                {readedMessages.length > 0 && (
                  <h2>You have {readedMessages.length} readed messages.</h2>
                )}
              </div>
            );
          }
    
          const unReadMessages = ["React", "Re: React", "Re:Re: React"];
          const readedMeaasges = ["JS", "HTML", "CSS", "Less", "ES6"];
          ReactDOM.render(
            <Mailbox unreadMessages={unReadMessages} readedMeaasges={readedMeaasges} />,
            document.getElementById("root")
          );
        </script>
    

    2、三目运算符

    通过使用 JavaScript 中的三目运算符 condition ? true : false

     <script type="text/babel">
          function Mailbox(props) {
            const unreadMessages = props.unreadMessages;
            const readedMessages = props.readedMeaasges;
            return (
              <div>
                <h1>Hello!</h1>
                {unreadMessages.length > 0 && (
                  <h2>You have {unreadMessages.length} unread messages.</h2>
                )}
                {readedMessages.length > 0 && (
                  <h2>You have {readedMessages.length} readed messages.</h2>
                )}
                {readedMessages.length < unreadMessages.length ? (
                  <h2>You have more unread messages.</h2>
                ) : (
                  <h2>You have more readed messages.</h2>
                )}
              </div>
            );
          }
    
          const unReadMessages = ["React", "Re: React", "Re:Re: React"];
          const readedMeaasges = ["JS", "HTML", "CSS", "Less", "ES6"];
          ReactDOM.render(
            <Mailbox
              unreadMessages={unReadMessages}
              readedMeaasges={readedMeaasges}
            />,
            document.getElementById("root")
          );
        </script>
    

    3、隐藏渲染(阻止组件渲染)

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

     <script type="text/babel">
          function WarningBanner(props) {
            if (!props.warn) {
              return null;
            }
    
            return <div className="warn_area">Waring! Waring! Waring! err~~~</div>;
          }
    
          class Page extends React.Component {
            constructor(props) {
              super(props);
              this.state = {
                showWarning: true
              };
            }
    
            handleToggleClick() {
              this.setState(
                (state, props) => ({
                  showWarning: !state.showWarning
                }),
                () => {
                  console.log("修改成功!");
                }
              );
            }
    
            render() {
              return (
                <div>
                  <WarningBanner warn={this.state.showWarning} />
                  <button onClick={this.handleToggleClick.bind(this)}>
                    {this.state.showWarning ? "Hide" : "Show"}
                  </button>
                </div>
              );
            }
          }
          ReactDOM.render(<Page />, document.getElementById("root"));
        </script>
    

    运行在浏览器:



    在组件的 render 方法中返回 null 并不会影响组件的生命周期。在上例的基础上添加componentDidUpdate 方法,componentDidUpdate 依然会被调用。

         componentDidUpdate(prevProps, prevState) {
              console.log('prevState'+JSON.stringify(prevState));          
            }
    

    相关文章

      网友评论

          本文标题:JSX 中内联条件渲染的方法

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