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设置css属性的代码
Dec 28 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
Oct 10 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 Javascript
React-native桥接Android原生开发详解
Jan 17 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
详解如何使用微信小程序云函数发送短信验证码
Mar 13 Javascript
vue watch关于对象内的属性监听
Apr 22 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提示Failed to write session data错误的解决方法
2014/12/17 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
window.location.hash 使用说明
2010/11/08 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
夜大毕业生自我鉴定
2013/10/31 职场文书
党课学习思想汇报
2014/01/02 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
小学体育组工作总结
2015/08/13 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技