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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
Javascript 篱式条件判断
Aug 22 Javascript
JQuery学习笔录 简单的JQuery
Apr 09 Javascript
jquery ajaxSubmit 异步提交的简单实现
Feb 28 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序和百度的语音识别接口详解
May 06 Javascript
使用vue中的混入mixin优化表单验证插件问题
Jul 02 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
关于小程序优化的一些建议(小结)
Dec 10 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之第六天
2006/10/09 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
Python标准异常和异常处理详解
2015/02/02 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
python 元组的使用方法
2020/06/09 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
linux下进程间通信的方式
2014/12/23 面试题
2014年健康教育实施方案
2014/02/17 职场文书
剪彩仪式主持词
2014/03/19 职场文书
球队口号
2014/06/18 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
财务年终工作总结大全
2019/06/20 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
python图像处理 PIL Image操作实例
2022/04/09 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS