前端React 条件渲染

React 条件渲染

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

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

先来看两个组件:

function UserGreeting(props) {
  return <h1>欢迎回来!</h1>;
}

function GuestGreeting(props) {
  return <h1>请先注册。</h1>;
}

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

React 实例

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 实例

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 = null;     if (isLoggedIn) {       button = <LogoutButton onClick={this.handleLogoutClick} />;     } else {       button = <LoginButton onClick={this.handleLoginClick} />;     } return (       <div>           <Greeting isLoggedIn={isLoggedIn} /> {button}       </div>     );   }   

}   ReactDOM.render( <LoginControl />,    document.getElementById(‘example‘) );

与运算符 &&

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

React 实例

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 (
    The user is {isLoggedIn ? ‘currently‘ : ‘not‘} logged in.
  ); }

同样它也可以用在较大的表达式中,虽然不太直观:

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

阻止组件渲染

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

在下面的例子中,<WarningBanner /> 根据属性 warn 的值条件渲染。如果 warn 的值是 false,则组件不会渲染:

React 实例

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

组件的 render 方法返回 null 并不会影响该组件生命周期方法的回调。例如,componentWillUpdate 和 componentDidUpdate 依然可以被调用。

原文地址:https://www.cnblogs.com/osghong/p/9869264.html

时间: 2024-08-03 14:32:00

前端React 条件渲染的相关文章

2017.11.7 ant design - upload 组件的使用, react 条件渲染以及 axios.all() 的使用

一.主要任务:悉尼小程序管理后台,添加景点页面的开发 二.所遇问题及解决 1. 上传多个不同分类音频信息时,如中文音频和英文音频,要求音频不是放在一个数组中的,每个音频是一个独立的字段,此时: <Upload action="/hserve/v2/file/upload/" // 必选参数,上传的地址: listType="picture" // 上传列表的内建样式,这个不是很明白 text.picture.picture-card 之间的区别,默认值为 te

React 条件渲染简单演示

模拟根据登录情况判断要显示的欢迎界面 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker'; import PropTypes from 'prop-types'; function Greeting(prop

React——条件渲染

在React中,你可以创建各种不同的组件,然后根据应用的状态渲染出它们其中的一般部分. 一.用变量存储元素 可以将元素保存到一个变量中,通过为变量赋不同的值去渲染不同的元素 function LoginButton(props){ return <button onClick={props.handleClick}>Login</button> } function LogoutButton(props){ return <button onClick={props.hand

详解React 的几种条件渲染以及选择

对于一个展示页面来讲, 通常有好几种展示状态(以列表页为例): 数据为空, 空页面 取数据时发生错误, 错误页面 数据正常 加载状态 针对以上三种情况, react渲染列表的时候要正确判断并渲染出相应的视图, 也就是条件渲染. 不同于vue的v-if, v-show等框架提供的api, react的条件渲染都是js原生的再加上一点点的hack. 比如react文档提到的. if/else, && 和三目等等. 当然上面的都是常用的一些方法, 但是也存在着各种问题, 比如条件分支过多的的事时

React学习:条件渲染

在react中的条件渲染和Vue不一样,react使用的是:使用不同的组件进行封装,然后根据使用的场景再来判断使用哪一个组件 React中的条件渲染和js中的一样,使用js或者其他条件运算符进行不同组件的渲染 1.元素变量 可以使用变量来储存元素. 它可以帮助你有条件地渲染组件的一部分,而其他的渲染部分并不会因此而改变. //元素变量 function LoginButton(props) { return ( <button onClick={props.onClick}> Login &l

React官方文档学习记录(四)- 条件渲染

一点点记录,建议需要学习React的移步官方文档去学习. 在React中,你可以创建一个清晰(distinct)的组件来简要描述你现在需要的东西.然后,你只需要使用你应用中的state来渲染它们. React中的条件型渲染跟JavaScript中的条件运算符运行方式差不多.好像就是使用JavaScript中的if或者三元运算符创建元素来显示现在的状态,然后让React更新UI来匹配这些修改. 下面这个例子就是根据不同的isLoggedIn进行不同的欢迎. 1 2 3 4 5 6 7 8 9 10

React中条件渲染和循环

条件渲染 React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI. 具体实现可以看下面的例子 1.在 src -> components 文件夹中,再新建 list.js ,具体代码如下: import React, { Component } from 'react'; class List extends Component { // 状态的初始化一般放在构造器中

React中条件渲染

17==> 条件渲染 state初始化一般写在构造器当中 CharShop.js如下 import React, { Component } from "react"; export default class CharShop extends Component { // state初始化一般写在构造器当中 constructor(props){ super(props); this.state={ goods: [{ id: 1, text: "web111&quo

React的条件渲染和列表渲染

React事件 特点:1/react事件,绑定事件的命名,驼峰命名法.2/{},传入1个函数,而不是字符串 <button onClick={this.sendData}>传递helloworld给父元素</button> 事件对象:React返回的事件对象是代理的原生的事件对象,如果想要查看事件对象的具体值,必须之间输出事件对象的属性. 注意:原生,阻止默认行为时,可以直接返回return false:React中,阻止默认必须e.preventDefault(); React事