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 相关文章推荐
javascript仿php的print_r函数输出json数据
Sep 13 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
js document.write()使用介绍
Feb 21 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
分享十三个最佳JavaScript数据网格库
Apr 07 Javascript
js和jquery中获取非行间样式
May 05 jQuery
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 Javascript
vue实现图书管理系统
Dec 29 Vue.js
threejs太阳光与阴影效果实例代码
Apr 05 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
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
JS作用域深度解析
2016/12/29 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python使用psutil模块获取系统状态
2016/08/27 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
《夸父追日》教学反思
2014/02/26 职场文书
六五普法宣传标语
2014/10/06 职场文书
党支部承诺书
2015/01/20 职场文书
工作自我评价范文
2015/03/05 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
Redis持久化与主从复制的实践
2021/04/27 Redis
详解Python自动化之文件自动化处理
2021/06/21 Python
Python如何将list中的string转换为int
2022/07/15 Ruby
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis