美文网首页
ReactJS_07 React 条件渲染

ReactJS_07 React 条件渲染

作者: 习惯芥末味 | 来源:发表于2018-10-04 13:14 被阅读0次

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 />

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')
);

与运算符 &&

你可以通过用花括号包裹代码在 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 会忽略并跳过它。

三元运算

有条件地呈现元素内联的另一种方法是使用JavaScript条件运算符:

condition ? true : false

在下面的示例中,我们使用它来有条件地渲染一小块文本:

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

用于更大的表达式,尽管它不太明显发生了什么:
例:把上面案例的if-else运算改为三元运算

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

防止组件渲染

在极少数情况下,您可能希望组件隐藏自身,即使它被其他组件渲染。让render方法返回 null 而不是它的渲染结果即可实现。
在下面的示例中,<WarningBanner />将根据所调用的prop的值进行渲染warn。如果prop的值是false,则组件不渲染:

 function WarningBanner(props) {
        if (!props.warn) {
            return null;
        }

        return (
            <div className="warning">
                警告!
            </div>
        );
    }

    class Page extends React.Component {
        constructor(props) {
            super(props);
            this.state = {showWarning: true};
            this.handleToggleClick = this.handleToggleClick.bind(this);
        }

        handleToggleClick() {
            this.setState(prevState => ({
                showWarning: !prevState.showWarning
            }));
        }

        render() {
            return (
                <div>
                    <WarningBanner warn={this.state.showWarning} />
                    <button onClick={this.handleToggleClick}>
                        {this.state.showWarning ? '隐藏' : '显示'}
                    </button>
                </div>
            );
        }
    }

    ReactDOM.render(
        <Page />,
        document.getElementById('example')
    );

通过条件渲染页面:
首先建一个函数,来根据不同的情况返回不同的值,然后建一个类组建,先进行变量的初始化,对变量进行操作,在组件内进行小的渲染,最后通过 ReactDOM.render() 渲染到页面上。

为什么要进行变量的初始化?
一个软件所分配到的空间中极可能存在着以前其他软件使用过后的残留数据,这些数据被称之为垃圾数据。所以通常情况下我们为一个变量,为一个数组,分配好存储空间之后都要对该内存空间初始化。
简单来说就是清理残留数据。

相关文章

  • ReactJS_07 React 条件渲染

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

  • react条件渲染

    条件渲染的几种形式 &&短路运算符 总结:根据组件代码的复杂程度,可以依次选择。

  • react 条件渲染

    有时候我们需要根据条件来决定是否渲染一个组件,那么我们会怎么写呢? 1. 用if判断条件,然后return 不同的...

  • React 条件渲染

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

  • react 条件渲染

    条件渲染相当于vue的v-if 和 v-show 小结if else if(A){a}else{b} 通过...

  • React条件渲染

    在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后,依据应用的不同状态,你可以只渲染对应状态下的...

  • React条件渲染

    react条件渲染的形式有4种。常用的为&& 和 三目运算 元素变量控制 它可以帮助你有条件地渲染组件的一部分,而...

  • React文档:条件渲染

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

  • react文档——条件渲染

    条件渲染 在 React 中,你可以创建一个囊括所有你需要行为的特定的组件。然后,你可以根据你的应用的 state...

  • react 普通渲染、条件渲染、列表渲染

    1. 普通渲染 2. 条件渲染 3. 列表渲染 以上功能是 jsx 特性

网友评论

      本文标题:ReactJS_07 React 条件渲染

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