组件是react最最核心的用法,组件就是可复用的业务模块

声明方式

函数声明

  1. 函数以大写字母开头,用来区分组件和普通react元素
  2. 必须有返回值
  3. 返回null即为空 ```javascript const Compoent = () => { return
    组件
    }

ReactDom。reader(, document.getElementById(“root”))

  1. <a name="Ot9mZ"></a>
  2. #### class声明
  3. 1. 必须继承React.Component
  4. 2. 必须提供render,内部必须有返回值
  5. 3. 类组件也是大写字母开头
  6. ```javascript
  7. class NewComponent extends React.Component {
  8. render (){
  9. return (
  10. <div>第一个类组件</div>
  11. )
  12. }
  13. }

组件抽离

image.png

事件处理

事件绑定

类组件

  1. class NewComponent extends React.Component {
  2. handleClick () {
  3. console.log("我执行了按钮");
  4. }
  5. render (){
  6. return (
  7. <div onClick={this.handleClick}>第一个类组件</div>
  8. )
  9. }
  10. }

函数组件

  1. <button onClick={handleClick}>按钮</button>

事件对象

react中的时间对象,实际上是合成事件对象,不用担心浏览器兼容性的不同

  1. const handleClick = (e)=> {
  2. e.preventDefault()
  3. console.log("我执行了按钮");
  4. }

组件状态

函数叫无状态组件

函数组件没有自己的数据,只负责渲染

类组件是有状态组件

类组件负责更新UI

组件的数据

在有状态组件中有state用于使用私有变量
setState()用于变更数据状态

State初始化

es6标准写法

  1. class NewComponent extends React.Component {
  2. constructor(){
  3. super()
  4. this.state ={
  5. name: "第一个类组件"
  6. }
  7. }
  8. render (){
  9. return (
  10. <div onClick={this.handleClick}>{this.state.name}</div>
  11. )
  12. }
  13. }

简化写法

  1. class NewComponent extends React.Component {
  2. state ={
  3. name: "第一个类组件"
  4. }
  5. render (){
  6. return (
  7. <div onClick={this.handleClick}>{this.state.name}</div>
  8. )
  9. }
  10. }

setState

  1. class NewComponent extends React.Component {
  2. state ={
  3. name: "第一个类组件"
  4. }
  5. render (){
  6. return (
  7. <div onClick={this.setState({
  8. name: this.state.name + "哈"
  9. })}>{this.state.name}</div>
  10. )
  11. }
  12. }

组件内的this

  • JSX内通过箭头函数绑定this,从而抽离方法
  • 通过bind绑定this
  • 直接用箭头函数定义方法 ```javascript class NewComponent extends React.Component { state ={ name: “第一个类组件” } handleClick() { this.setState({
    1. name: this.state.name + "哈"
    }) } render (){ return (
    1. <div onClick={()=> this.handleClick}>{this.state.name}</div>
    ) } }
  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/584428/1644583860713-67cd6e86-77a8-4f8c-9e13-a312ba7c92e9.png#clientId=u32393f9f-d78f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=309&id=u9db9d39d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=617&originWidth=712&originalType=binary&ratio=1&rotation=0&showTitle=false&size=207819&status=done&style=none&taskId=uefe21f9f-c725-4665-bafa-13efb428e15&title=&width=356)
  2. ```javascript
  3. class NewComponent extends React.Component {
  4. state ={
  5. name: "第一个类组件"
  6. }
  7. handleClick = () =>{
  8. this.setState({
  9. name: this.state.name + "哈"
  10. })
  11. }
  12. render (){
  13. return (
  14. <div onClick={ this.handleClick}>{this.state.name}</div>
  15. )
  16. }
  17. }