今日分享:
事件的处理方式
组件的定义及运用
react中数组循环最好用map,foreach没有返回值;
数组写法
<div id='my'></div> <script type="text/babel"> var div = [<h1>123456</h1>, <h1>123456</h1>, <h1>123456</h1>, <h1>123456</h1>, ] ReactDOM.render( <div> {div} </div>, document.getElementById("my") ) </script>
map写法
<div id='my'></div> <script type="text/babel"> /*map第一种写法*/ var arr = [1,2,3,4,5] ReactDOM.render( <div> { arr.map((item,index)=>{ return <div key={index}>{item}</div> }) } </div>, document.getElementById("my") ) /*map第二种写法*/ var arr = [1,2,3,4,5] var a = arr.map((item,index)=>{ return <div key={index}>{item}</div> }) ReactDOM.render( <div> {a} </div>, document.getElementById("my") ) </script>
for写法
<div id='my'></div> <script type="text/babel"> var arr = [1,2,3,4,5] var a = [] for(var i=0; i<arr.length; i++){ a.push(<div key={i}>{arr[i]}</div>) } ReactDOM.render( <div> {a} </div>, document.getElementById("my") ) </script>
Tab实例
<div id="my"></div> <script type="text/babel"> //加载不同组件 class ContentA extends React.Component { render(){ return( <div> <h1>我是内容A</h1> </div> ) } } class ContentB extends React.Component { render(){ return( <div> <h1>我是内容B</h1> </div> ) } } function Content(props) { switch (props.type) { case 0: return <ContentA /> break; case 1: return <ContentB /> break; case 2: return <h1>我是内容C</h1> break; case 3: return <h1>我是内容D</h1> break; default: return <p>默认{props.type}</p> break; } } //end class Tab extends React.Component { constructor(){ super(); this.state ={ flag:0, lists:[{title:'标题A',content:'内容A'}, {title:'标题B',content:'内容B'}, {title:'标题C',content:'内容C'}, {title:'标题D',content:'内容D'}] } } change(type) { this.setState({ flag:type }) } render(){ var flag = this.state.flag; var list = this.state.lists.map((item,index)=>{ return <li className={index==flag ?'selected':''} onClick={()=>this.change(index)} key={index}>{item.title}</li> }) var content = this.state.lists.map((item,index)=>{ return (index==flag ? <p key={index}>{item.content}</p>:'') }) return ( <div> <ul>{list}</ul> <div> {content} //加载不同组件 <Content type={flag}></Content> </div> </div> ) } }; ReactDOM.render( <Tab></Tab>, document.getElementById("my") ); </script>
组件 两种写法
var data = { name:'tina', age:18, address:'苏州' } /*1、es6 的 class类*/ class Hi extends React.Component { render(){ return( <div> <h1>我是内容B {this.props.data.age}</h1> </div> ) } } /*2、使用函数定义一个组件*/ function Hello(){ return <div>Hello {props.name} {props.age} {props.address}!</div> } ReactDOM.render( <div> <Hi data={data}></Hi> <Hello {...data}></Hello> </div>, document.getElementById("my") );
事件绑定
class App extends React.Component { constructor(){ super(); this.state = { flag:true } this.handleClick=this.change1.bind(this); //第一种方式在构造器中声明绑定 } change1(){ this.setState({ flag:true }) } change2(){ this.setState({ flag:false }) } render(){ return( //第一种,官方推荐 在构造器中声明绑定 <button onClick={this.handleClick}></button> // 第二种, 第一种的简单版 <button onClick={this.change2.bind(this)}></button> // 第三种, ES6箭头函数 <button onClick={()=>this.change2}></button> )