React的条件渲染和列表渲染
React事件
特点:
1/react事件,绑定事件的命名,驼峰命名法。
2/{},传入1个函数,而不是字符串
<button onClick={this.sendData}>传递helloworld给父元素</button>
事件对象:React返回的事件对象是代理的原生的事件对象,如果想要查看事件对象的具体值,必须之间输出事件对象的属性。
注意:
原生,阻止默认行为时,可以直接返回return false;
React中,阻止默认必须e.preventDefault();
React事件传参数
{/* 使用ES6箭头函数传递多个参数 */} <button onClick={(e)=>{this.parentEvent1('msg:helloworld',e)}}>提交</button> {/* //不使用ES6箭头函数传递多个参数的方式 */} <button onClick={function(e){this.parentEvent1('不使用es6,msg:helloworld',e)}.bind(this)}>提交</button>
条件渲染
React中条件渲染即和JavaScript中,条件运算,如if...else...三元运算符等。
1/直接通过条件运算返回要渲染的JSX对象
2/通过条件运算得出jsx对象,在将JSX对象渲染到模板中。
案例一
//条件渲染一 function Login() { return ( <div> <h1>欢迎登录</h1> </div> ) } function LoginNeed() { return ( <div> <h1>请先登录</h1> </div> ) } class HelloWorld extends React.Component{ constructor(props) { super(props) this.state = { isLogin:false } } render() { if(this.state.isLogin){ return( <Login /> ) }else{ return ( <LoginNeed /> ) } } } ReactDOM.render( <HelloWorld />, document.querySelector('#root') )
案例二
function Login() { return ( <div> <h1>欢迎登录</h1> </div> ) } function LoginNeed() { return ( <div> <h1>请先登录</h1> </div> ) } class HelloWorld extends React.Component{ constructor(props) { super(props) this.state = { isLogin:true } } render() { let element = null if(this.state.isLogin){ element = <Login /> }else{ element = <LoginNeed /> } return ( <div> {element} </div> ) } } ReactDOM.render( <HelloWorld />, document.querySelector('#root') )
案例一直接根据判断条件进行return,这样耦合性太强,而且很难增加新功能,
使用案例二这种将函数赋值给元素,大大提升了代码的复用性,而且可拓展能力加强
列表渲染
将列表内容拼装成数组放置到模板中。将数据拼装成数组的JSX对象。
使用数组的map方法,对每一项数据按照JSX的形式进行加工,最终得到1个每一项都是JSX对象的数组,在将数组渲染到模板中。
Key值需要放置到每一项中。
简单案例
class HelloWorld extends React.Component{ constructor(props) { super(props) this.state = { list:[ { title:"第一节 React事件", content:"事件内容" }, { title:"第二节 React数据传递", content:"数据传递内容", }, { title:"第三节 条件渲染", content:"条件渲染内容", } ] } } render() { let ArrList = [] for(let i=0;i<this.state.list.length;i++){ let item = ( <li> <h1>{this.state.list[i].title}</h1> <p>{this.state.list[i].content}</p> </li> ) ArrList.push(item) } return ( <div> <ul> {ArrList} </ul> </div> ) } } ReactDOM.render( <HelloWorld />, document.querySelector('#root') )
解耦性更高的方案二
function ListItem(props){ return ( <div> <h1>{props.item.title}</h1> <p>{props.item.content}</p> </div> ) } class HelloWorld extends React.Component{ constructor(props) { super(props) this.state = { list:[ { title:"第一节 React事件", content:"事件内容" }, { title:"第二节 React数据传递", content:"数据传递内容", }, { title:"第三节 条件渲染", content:"条件渲染内容", } ] } } render() { let Arr = this.state.list.map((item)=>{ return( <ListItem item={item} /> ) }) return ( <div> {Arr} </div> ) } } ReactDOM.render( <HelloWorld />, document.querySelector('#root') )