欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

React学习笔记之条件渲染(一)

程序员文章站 2024-02-04 20:50:40
前言 在react中,你可以创建不同的组件各自封装你需要的东西。之后你可以只渲染其中的一部分,这取决于应用的state(状态)。下面就来看看详细的介绍: 条件渲染 可...

前言

在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')
);

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。