React学习笔记之条件渲染(一)


Posted in Javascript onJuly 02, 2017

前言

在React中,你可以创建不同的组件各自封装你需要的东西。之后你可以只渲染其中的一部分,这取决于应用的state(状态)。下面就来看看详细的介绍:

条件渲染

可以根据state的值进行组件的条件渲染。例如:

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

你还可以用变量去存储组件,以便进行条件筛选,使得渲染函数的返回值更加清爽,例如:

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

还可以使用短操作符来实现条件筛选,可以用更短的代码写出渲染结果。例如&&来替代if,?:来替代if else, 例如:

function Mailbox(props) { 
 const unreadMessages = props.unreadMessages;
 return (
 <div>
 <h1>Hello!</h1>
 {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')
);
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>
 );
}

如果组件有时候需要渲染出来,而有时候不需要渲染出来,在不需要渲染的时候返回null即可。例如:

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

 return (
 <div className="warning">
 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 ? 'Hide' : 'Show'}
 </button>
 </div>
 );
 }
}

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
ES6数组的扩展详解
Apr 25 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
js实现列表按字母排序
Aug 11 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 #Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 #Javascript
关于使用axios的一些心得技巧分享
Jul 02 #Javascript
React服务端渲染(总结)
Jul 01 #Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 #Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php 归并排序 数组交集
2011/05/10 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php接口技术实例详解
2016/12/07 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
python实现交并比IOU教程
2020/04/16 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
企业治理工作自我评价
2013/09/26 职场文书
本科应届生自荐信
2014/06/29 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python