react 之 Class API

class API就是编写类组件,虽然react官方不在推荐使用,但是一般公司里维护的老项目里还是有的,可以简单了解下

1.类组件的基础结构

类组件就是通过js里的类来组织组件的代码的

1️⃣通过类属性state定义状态数据

2️⃣通过setState方法来修改状态数据

3️⃣通过render来写UI模版(JSX语法一致)

javascript 复制代码
// Class API
import { Component } from "react"
class Counter extends Component {
  // 编写组件的逻辑代码
  // 1. 状态变量  2. 事件回调  3.UI(JSX)
  // 1. 定义状态变量
  state = {
    count: 0
  }
  // 2. 定义事件回调修改状态数据
  setCount = () => {
    // 修改状态数据
    this.setState({
      count: this.state.count + 1
    })
  }
  render () {
    return <button onClick={this.setCount}>{this.state.count}</button>
  }
}
function App () {
  return (
    <>
      <Counter />
    </>
  )
}

export default App

2.类组件的生命周期函数

概念:组件从创建到销毁的各个阶段自动执行的函数就是生命周期函数

1.componentDidMount:组件挂载完毕自动执行 ------ 异步数据获取(组件渲染完毕执行一次,发送网络请求)

2.componentWillUnmount:组件卸载时自动执行 ------ 清理副作用(比如清楚定时器,清除事件绑定)

javascript 复制代码
// Class API 生命周期

import { Component, useState } from "react"

class Son extends Component {
  // 声明周期函数
  // 组件渲染完毕执行一次  发送网络请求
  componentDidMount () {
    console.log('组件渲染完毕了,请求发送起来')
    // 开启定时器
    this.timer = setInterval(() => {
      console.log('定时器运行中')
    }, 1000)
  }

  // 组件卸载的时候自动执行  副作用清理的工作 清除定时器 清除事件绑定
  componentWillUnmount () {
    console.log('组件son被卸载了')
    // 清除定时器
    clearInterval(this.timer)
  }

  render () {
    return <div>i am Son</div>
  }
}

function App () {
  const [show, setShow] = useState(true)
  return (
    <>
      {show && <Son />}
      <button onClick={() => setShow(false)}>unmount</button>
    </>
  )
}

export default App

3.类组件的组件通信

概念:类组件和hooks编写的组件在组件通信的思想上完全一致

1️⃣父传子:直接通过prop子组件标签身上绑定父组件中的数据

javascript 复制代码
// Class API 父子通信
import { Component } from "react"
// 子组件
class Son extends Component {
  render () {
    // 使用this.props.msg
    return <>
      <div>我是子组件 {this.props.msg}</div>
    </>
  }
}

// 父组件
class Parent extends Component {
  state = {
    msg: 'this is parent msg'
  }
  render () {
    return <div>我是父组件<Son msg={this.state.msg}/></div>
  }
}
function App () {
  return (
    <>
      <Parent />
    </>
  )
}

export default App

2️⃣子传父:在子组件标签身上绑定父组件中的函数,子组件中调用这个函数传递参数

javascript 复制代码
// Class API 父子通信

import { Component } from "react"
// 1. 父传子  直接通过prop子组件标签身上绑定父组件中的数据即可
// 2. 子传父  在子组件标签身上绑定父组件中的函数,子组件中调用这个函数传递参数

// 总结
// 1. 思想保持一致
// 2. 类组件依赖于this


// 子组件
class Son extends Component {
  render () {
    // 使用this.props.msg
    return <>
      <button onClick={() => this.props.onGetSonMsg('我是son组件中的数据')}>sendMsgToParent</button>
    </>
  }
}

// 父组件
class Parent extends Component {
  getSonMsg = (sonMsg) => {
    console.log(sonMsg)
  }

  render () {
    return <div>我是父组件<Son onGetSonMsg={this.getSonMsg} /></div>
  }
}


function App () {
  return (
    <>
      <Parent />
    </>
  )
}

export default App

3.1总结

跟hooks思想保持一致

类组件依赖于this

相关推荐
御坂1002716 小时前
Vue - @change应用实现下拉框联动功能
前端·javascript·vue.js
小雨下雨的雨16 小时前
基于 Electron 运行时的鸿蒙PC桌面应用-安全可靠的随机密码生成工具
前端·javascript·华为·electron·前端框架·鸿蒙
瘦瘦瘦大人16 小时前
Vue 项目实现关闭/刷新浏览器窗口前的离开确认提示
前端·javascript·vue.js
大家的林语冰16 小时前
尤雨溪官宣:Vite+ 全员加盟 Cloudflare,正式进军全栈开发和 AI 部署云平台!
前端·javascript·vite
独特的螺狮粉16 小时前
金属硬度与熔点对照表APP - 通过鸿蒙PC Electron框架完整技术实现指南
前端·javascript·electron·前端框架·开源·鸿蒙
gogoing17 小时前
React Hooks 完整指南
react.js
情多多7717 小时前
基于NetCorePal Cloud Framework的DDD架构管理系统实践
javascript
小林ixn17 小时前
前后端模块化分离实战:从零搭建用户列表展示(HTML+CSS+JS + json-server)
前端·javascript
天才熊猫君17 小时前
我把一个 bug 发给 ai,ai 直接通过 playwright mcp 直接排查出 bug。。
前端·javascript
meilindehuzi_a17 小时前
打破0基础:通过 5 个核心案例深度拆解 JavaScript 正则表达式与运行时类型系统
开发语言·javascript·正则表达式