• React--组件的生命周期


    1.1组件生命周期概述

    • 意义:组件的生命周期有助于理解组件的运作方式,完成更复杂的组件功能、分析组件错误原因等
    • 组件的生命周期:组件从创建--》卸载不用的过程
    • 生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数
    • 钩子函数的作用:为开发人员在不同阶段操作组件提供了时机
    • 只有类组件才有生命周期

    1.2生命周期的三个阶段

    • 每个阶段的执行时机
    • 每个阶段钩子函数的执行顺序
    • 每个阶段钩子函数的作用

    1.3创建时(挂载阶段) 

    • 执行时机:组件创建时(页面加载)
    • 执行顺序:

     

    1. class App extends React.Component{
    2. constructor(props){
    3. super(props)
    4. console.warn('生命周期钩子函数:constructor')
    5. }
    6. state={
    7. count:0
    8. }
    9. componentDidMount(){
    10. console.warn('生命周期钩子函数:componentDidMount')
    11. }
    12. render(){
    13. console.warn('生命周期钩子函数:render')
    14. // this.setState({
    15. // count:2
    16. // }) //会造成递归渲染
    17. return(
    18. <div>
    19. <h1>统计豆豆被打的次数:h1>
    20. <button>打豆豆button>
    21. div>
    22. )
    23. }
    24. }
    25. ReactDOM.render(<App/>,//调用的是父组件
    26. document.getElementById('root'))

    递归渲染报错截图:

    1.4更新时

    • 执行时机:1.setState()2.foreDate()3.组件接收到新的props
    • 说明:以上三者任意一种变化,组件就会重新渲染
    • 执行顺序:

     

    1. class App extends React.Component{
    2. constructor(props){
    3. super(props)
    4. }
    5. state={
    6. count:0
    7. }
    8. handleClick=()=>{
    9. this.setState({
    10. count:this.state.count+1
    11. })
    12. }
    13. render(){
    14. console.warn('生命周期钩子函数:render')
    15. // this.setState({
    16. // count:2
    17. // }) //会造成递归渲染
    18. return(
    19. <div>
    20. {/* <h1>统计豆豆被打的次数:{this.state.count}h1> */}
    21. <Counter count={this.state.count}>Counter>
    22. <button onClick={this.handleClick}>打豆豆button>
    23. div>
    24. )
    25. }
    26. }
    27. class Counter extends React.Component{
    28. render(){
    29. console.warn('子组件---生命周期钩子函数:render')
    30. return(
    31. <h1 id='title'>统计豆豆被打次数:{this.props.count}h1>
    32. )
    33. }
    34. componentDidUpdate(prevProps){
    35. console.warn('子组件--生命周期函数:componentDidUpdate')
    36. //获取DOM
    37. const title = document.getElementById('title')
    38. console.log(title.innerHTML)
    39. console.log('上一次的props',prevProps,',当前的props:',this.props)
    40. if(prevProps.count !== this.props.count){
    41. this.setState({})
    42. }
    43. }
    44. }
    45. ReactDOM.render(<App/>,//调用的是父组件
    46. document.getElementById('root'))

     1.5卸载时(卸载阶段)

    • 执行时机:组件从页面中消失

    1. class App extends React.Component{
    2. constructor(props){
    3. super(props)
    4. }
    5. state={
    6. count:0
    7. }
    8. handleClick=()=>{
    9. this.setState({
    10. count:this.state.count+1
    11. })
    12. }
    13. render(){
    14. return(
    15. <div>
    16. {
    17. this.state.count>3? <span>啊,豆豆被打死了span>
    18. :<Counter count={this.state.count}>Counter>
    19. }
    20. <button onClick={this.handleClick}>打豆豆button>
    21. div>
    22. )
    23. }
    24. }
    25. class Counter extends React.Component{
    26. componentDidMount(){
    27. setInterval(()=>{
    28. console.log('定时器正在进行')
    29. },500
    30. )
    31. }
    32. render(){
    33. return(
    34. <div>
    35. {/* {
    36. this.props.count>3? <span>啊,豆豆被打死了span>
    37. :<h1 id='title'>统计豆豆被打次数:{this.props.count}h1>
    38. } */}
    39. <h1 id='title'>统计豆豆被打次数:{this.props.count}h1>
    40. div>
    41. )
    42. }
    43. componentWillUnmount(){
    44. console.warn('生命周期函数:componentWillUnmount')
    45. //清理定时器
    46. clearInterval()
    47. }
    48. }
    49. ReactDOM.render(<App/>,//调用的是父组件
    50. document.getElementById('root'))

     

    关于this.timerId可参考文章:http://t.csdn.cn/VYDQ3 

  • 相关阅读:
    【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
    图片操作笔记-滤波-python
    为什么用户在注册时需要使用邮箱或手机号作为注册名?
    vue_day3
    Java 设计模式实战系列—单例模式
    能量、功率、能量谱密度、功率谱密度、自相关函数_Matlab
    Codeforces暑期训练周报(8.22~8.28)
    Java lambda 动态查询
    人工智能之地形导航系统
    【论文阅读】Anchor-Free Person Search
  • 原文地址:https://blog.csdn.net/weixin_53052268/article/details/126028367