react基本语法

react属于前端三大主流框架之一
快速入门示例

 <script type="text/babel">
   // 接收 2 个参数:JSX(视图的描述)、绑定的根元素
   ReactDOM.render(<h1>Hello.react</h1>,document.getElementById('app'));
 </script>

通过上面示例发现react是通过createElement来创建的虚拟DOM,jsx来描述的视图
react组件
在react中组件分为函数组件与类组件
函数组件简单示例

<script type="text/babel">
  function Test(){
    return (
      <h1>Hello</h1>
    )
  }

ReactDOM.render(<Test />, document.getElementById('app'));
</script>

类组件简单示例


<script type="text/babel">
  class Test extends React.Component{
    render(){
      return (
        <p>this is a test</p>
      )
    }
  }

ReactDOM.render(<Test />, document.getElementById('app'));
</script>

两者最明显的不同就是在语法上,函数组件是一个纯函数,它接收一个props对象返回一个react元素。而类组件需要去继承React.Component并且创建render函数返回react元素,这将会要更多的代码,虽然它们实现的效果相同。
既然是组件,那么我们就可以组件之间进行嵌套。代码如下:

<script type="text/babel">
  class HelloReact extends React.Component {
    render() {
      return <h1>hello React</h1>
    }
  }

class HelloJSX extends React.Component {
  render() {
    return <h1>hello JSX</h1>
  }
}

class Welcome extends React.Component {
  render() {
    return (
      <div>
      <HelloReact />
      <HelloJSX />
      </div>
    )
  }
}
ReactDOM.render(<Welcome/>, document.getElementById("app"));
</script>

react组件之间的传值
父组件向子组件传值跟vue一样都是用props

<script type="text/babel">
  class HelloReact extends React.Component {
    constructor(props){
      super(props)
    }
    render() {
      return (
        <div>
              <h1>hello React</h1>
              <p>{this.props.name}</p>
              <p>{this.props.gender}</p>
              </div>
      )
		}
}

function HelloJSX(props){
  return (
    <div>
    <h1>hello JSX</h1>
    <p>{props.name}</p>
<p>{props.gender}</p>
</div>
)
}


class Welcome extends React.Component {
  render() {
    return (
      <div>
      <HelloReact name="F71" gender="female"/>
      <HelloJSX name="F72" gender="male"/>
      </div>
    )
  }
}
ReactDOM.render(<Welcome/>, document.getElementById("app"));
</script>

插槽

<script type="text/babel">
        class Welcome extends React.Component {
            render() {
                return (
                    <div>
                       <p>这是 welcome 组件</p>
                       {this.props.children}
                    </div>
                )
            }
        }
       ReactDOM.render(<Welcome>this is a test</Welcome>, document.getElementById("app"));
 </script>

事件的处理
如何绑定事件?(事件的绑定就是用onClick)

代码如下:

<script type="text/babel">
     
        function Welcome(){

            function eventHandle(){
                console.log('函数组件绑定事件');
            }

            return (
                <p onClick={eventHandle}>this is a test</p>
            )
        }

        ReactDOM.render(<Welcome>this is a test</Welcome>, document.getElementById("app"));
      </script>

改变this指向的方法

  1. 箭头函数(箭头函数与普通函数this的指向是不一样的)
  2. 在 constructor 中通过 bind 来绑定 this 的指向
    代码如下
class Welcome extends React.Component {
            constructor(){
                super();
                this.eventHandle = this.eventHandle.bind(this)
            }
            eventHandle(){
                // 我们在组件的事件处理函数上面,期望 this 是指向当前这个组件
                console.log(this);
            }
            render() {
                return (
                    <div>
                       <p onClick={this.eventHandle}>这是 welcome 组件</p>
                       {this.props.children}
                    </div>
                )
            }
        }
        ReactDOM.render(<Welcome>this is a test</Welcome>, document.getElementById("app"));
  1. 在绑定事件的时候,通过箭头函数
    代码如下
class Welcome extends React.Component {
            eventHandle(){
                // 我们在组件的事件处理函数上面,期望 this 是指向当前这个组件
                console.log(this);
            }
            render() {
                return (
                    <div>
                       <p onClick={()=>this.eventHandle()}>这是 welcome 组件</p>
                       {this.props.children}
                    </div>
                )
            }
        }
        ReactDOM.render(<Welcome>this is a test</Welcome>, document.getElementById("app"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值