前言

在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')
);
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。
# react
# 条件渲染
# 重新渲染
# react重新渲染组件
# React中条件渲染的常见方法总结
# React中进行条件渲染的实现方法
# React条件渲染实例讲解使用
# React 条件渲染最佳实践小结(7种)
# 详解React 条件渲染
# 详解React 的几种条件渲染以及选择
# React组件化条件渲染的实现
# 你可以
# 不需要
# 可以用
# 还可以
# 如有
# 更大
# 不是很
# 你还
# 这篇文章
# 就来
# 谢谢大家
# 可以根据
# 来实现
# 返回值
# 更短
# GuestGreeting
# ReactDOM
# gt
# UserGreeting
# render
相关文章:
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
建站上传速度慢?如何优化加速网站加载效率?
网站制作软件有哪些,制图软件有哪些?
nginx修改上传文件大小限制的方法
制作表格网站有哪些,线上表格怎么弄?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
制作网站公司那家好,网络公司是做什么的?
建站之星安装后如何自定义网站颜色与字体?
家庭建站与云服务器建站,如何选择更优?
如何快速搭建高效简练网站?
,怎么用自己头像做动态表情包?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何确保FTP站点访问权限与数据传输安全?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
电脑免费海报制作网站推荐,招聘海报哪个网站多?
免费视频制作网站,更新又快又好的免费电影网站?
高性价比服务器租赁——企业级配置与24小时运维服务
网站制作员失业,怎样查看自己网站的注册者?
想学网站制作怎么学,建立一个网站要花费多少?
如何在腾讯云免费申请建站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
建站之星与建站宝盒如何选择最佳方案?
制作网站的软件免费下载,免费制作app哪个平台好?
建站DNS解析失败?如何正确配置域名服务器?
建站之星会员如何解锁更多建站功能?
公司门户网站制作流程,华为官网怎么做?
如何确认建站备案号应放置的具体位置?
音响网站制作视频教程,隆霸音响官方网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何通过免费商城建站系统源码自定义网站主题与功能?
,sp开头的版面叫什么?
家具网站制作软件,家具厂怎么跑业务?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何在搬瓦工VPS快速搭建网站?
制作旅游网站html,怎样注册旅游网站?
,怎么在广州志愿者网站注册?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何通过虚拟主机快速完成网站搭建?
网站制作公司排行榜,抖音怎样做个人官方网站
如何实现建站之星域名转发设置?
建设网站制作价格,怎样建立自己的公司网站?
如何选择靠谱的建站公司加盟品牌?
如何高效搭建专业期货交易平台网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何选择最佳自助建站系统?快速指南解析优劣
如何用狗爹虚拟主机快速搭建网站?
建站之星3.0如何解决常见操作问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。