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 input 数字验证代码
Jul 30 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
Knockoutjs快速入门(经典)
Dec 24 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
Apr 09 Javascript
javascript-简单的计算器实现步骤分解(附图)
May 30 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
JavaScript中的substr()方法使用详解
Jun 06 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
微信开发 js实现tabs选项卡效果
Oct 28 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
微信分享调用jssdk实例
Jun 08 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实现文件下载实例分享
2014/06/02 PHP
PHP整合PayPal支付
2015/06/11 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
详解vue 组件
2020/06/11 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
在Python中编写数据库模块的教程
2015/04/29 Python
python中黄金分割法实现方法
2015/05/06 Python
Python 操作MySQL详解及实例
2017/04/30 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python重试装饰器的简单实现方法
2019/01/31 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Python assert语句的简单使用示例
2019/07/28 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
护士实习鉴定范文
2013/12/22 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
雾霾停课通知
2015/04/24 职场文书