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 RegExp方法获取地址栏参数(面向对象)
Mar 10 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
jquery仅用6行代码实现滑动门效果
Sep 07 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
node实现定时发送邮件的示例代码
Aug 26 Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
微信小程序实现点赞业务
Feb 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
使用php4加速网络传输
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Python sorted对list和dict排序
2020/06/09 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
输入N,打印N*N矩阵
2012/02/20 面试题
群众路线剖析材料(四风)
2014/11/05 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
解决numpy和torch数据类型转化的问题
2021/05/23 Python
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android