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中两种链式调用实现代码
Jan 12 Javascript
caller和callee的区别介绍及演示结果
Mar 10 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
js中apply方法的使用详细解析
Nov 04 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 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中其实也可以用方法链
2011/11/10 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
js简易namespace管理器 实例代码
2013/06/21 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Django开发中的日志输出的方法
2018/07/02 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
技术人员面试提纲
2013/11/28 职场文书
人力资源专业推荐信
2013/11/29 职场文书
完美的中文自荐信
2014/05/24 职场文书
机械工程师岗位职责
2014/06/16 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年组织部工作总结
2014/11/14 职场文书
自荐信模板大全
2015/03/27 职场文书
生活小常识广播稿
2015/08/19 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
总结Python使用过程中的bug
2021/06/18 Python