React 第二节 组件定义及事件

2023年1月4日07:56:42

今日分享:
事件的处理方式
组件的定义及运用

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>
		)

  • 作者:i'm_zhangting
  • 原文链接:https://blog.csdn.net/weixin_42549581/article/details/91607717
    更新时间:2023年1月4日07:56:42 ,共 2689 字。