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 相关文章推荐
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
js获取指定日期周数以及星期几的小例子
Jun 27 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
JavaScript引用类型Object常见用法实例分析
Aug 08 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
微信小程序前端promise封装代码实例
Aug 24 Javascript
vue-loader中引入模板预处理器的实现
Sep 04 Javascript
JS如何在不同平台实现多语言方式
Jul 16 Javascript
Node.js 中如何收集和解析命令行参数
Jan 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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python logging添加filter教程
2019/12/24 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
降低python版本的操作方法
2020/09/11 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
最新党员思想汇报
2014/01/01 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
推荐信格式要求
2014/05/09 职场文书
好好学习保证书
2015/02/26 职场文书
银行求职自荐信范文
2015/03/04 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
机械生产实习心得体会
2016/01/22 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python