React-生命周期-作用 和 React-组件-CSSTransition

简介: React-生命周期-作用 和 React-组件-CSSTransition

constructor 生命周期方法中做什么


  • 通过 props 接收父组件传递过来的数据
  • 通过 this.state 初始化内部的数据
  • 通过 bind 为事件绑定实例 (this)




render 生命周期方法中做什么

  • 返回组件的网页结构




componentDidMount 生命周期方法中做什么

  • 依赖于 DOM 的操作可以在这里进行
  • 在此处发送 网络请求 就是最好的地方(官方建议)
  • 可以在此处添加一些订阅(会在 componentWillUnmount 取消订阅)




componentDidUpdate 生命周期方法中做什么

  • 可以在此对更新之后的组件进行操作




componentWillUnmount 生命周期方法中做什么

  • 在此方法中执行必要的清理操作
  • 例如,清除 timer,取消网络请求或清除
  • componentDidMount() 中创建的订阅等




React-组件-CSSTransition


动画组件


Transition

  • 该组件是一个和平台无关的组件(不一定要结合 CSS);
  • 在前端开发中,我们一般是结合 CSS 来完成样式,所以比较常用的是 CSSTransition;




CSSTransition

  • 在前端开发中,通常使用 CSSTransition 来完成过渡动画效果;




SwitchTransition


  • 两个组件显示和隐藏切换时,使用该组件




TransitionGroup


  • 将多个动画组件包裹在其中,一般用于列表中元素的动画;

首先来看 CSSTransition,从 CSSTransition 状态开始介绍,CSSTransition 有三个状态:

  • appear: 初始
  • enter:进入
  • exit:退出

当组件 第一次加载,当组件 显示,当组件 退出,的时候会自动查找如下类名:

  • -appear
  • -appear-active
  • -appear-done




通过 CSSTransition 来实现过渡效果


安装 react-transition-group

npm install react-transition-group --save


从安装好的库中导入 CSSTransition

import {CSSTransition} from 'react-transition-group';


  • 利用 CSSTransition 将需要执行过渡效果的组件或元素包裹起来
  • 编写对应的 CSS 动画,实现: .-enter / .-enter-active / .-enter-done

给 CSSTransition 添加一些属性:

  • in 属性:取值是一个布尔值, 如果取值为 false 表示触发退出动画, 如果取值是 true 表示触发进入动画
  • classNames 属性:指定动画类名的前缀
  • timeout 属性:设置动画超时时间

App.js:

import React from 'react';
import './App.css'
import {CSSTransition} from 'react-transition-group';
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isShow: false
        }
    }
    render() {
        return (
            <div>
                <CSSTransition in={this.state.isShow}
                               classNames={'box'}
                               timeout={3000}>
                    <div/>
                </CSSTransition>
                <button onClick={() => {
                    this.btnClick()
                }}>显示
                </button>
            </div>
        );
    }
    btnClick() {
        this.setState({
            isShow: true
        })
    }
}
export default App;

App.css:

.box-enter {
    /*
    进入动画执行之前绑定的类名
    */
    width: 0;
    height: 0;
    opacity: 0;
    background: skyblue;
}
.box-enter-active {
    /*
    进入动画执行过程中绑定的类名
    */
    width: 100px;
    height: 100px;
    opacity: 1;
    transition: all 3s;
}
.box-enter-done {
    /*
    进入动画执行完毕之后绑定的类名
    */
    width: 100px;
    height: 100px;
    opacity: 1;
    background: red;
}

退出状态的类名的情况, 修改 App.css 添加如下类名样式:

.box-exit {
    /*
    退出动画执行之前绑定的类名
    */
    width: 100px;
    height: 100px;
    opacity: 1;
    background: red;
}
.box-exit-active {
    /*
    退出动画执行过程中绑定的类名
    */
    width: 0;
    height: 0;
    opacity: 0;
    transition: all 3s;
}
.box-exit-done {
    /*
    退出动画执行完毕之后绑定的类名
    */
    width: 0;
    height: 0;
    opacity: 0;
    background: skyblue;
}

App.js:

import React from 'react';
import './App.css'
import {CSSTransition} from 'react-transition-group';
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isShow: false
        }
    }
    render() {
        return (
            <div>
                <CSSTransition in={this.state.isShow}
                               classNames={'box'}
                               timeout={3000}>
                    <div/>
                </CSSTransition>
                <button onClick={() => {
                    this.setState({
                        isShow: true
                    })
                }}>显示
                </button>
                <button onClick={() => {
                    this.setState({
                        isShow: false
                    })
                }}>隐藏
                </button>
            </div>
        );
    }
}
export default App;

如上的退出状态结束之后元素并没有删除,只是进行了隐藏,如果想,在退出状态结束之后将元素进行删除的话需要借助一个 unmountOnExit 进行实现。


  • unmountOnExit:如果取值为 true, 那么表示退出动画执行完毕之后删除对应的元素


第一次加载时的状态,就是在页面刚加载的时候触发的,修改 App.css 添加第一次加载的类名:

.box-appear {
    /*
    初始化动画执行之前绑定的类名
    */
    width: 0;
    height: 0;
    opacity: 0;
    background: skyblue;
}
.box-appear-active {
    /*
    初始化动画执行过程中绑定的类名
    */
    width: 100px;
    height: 100px;
    opacity: 1;
    transition: all 3s;
}
.box-appear-done {
    /*
    初始化动画执行完毕之后绑定的类名
    */
    width: 100px;
    height: 100px;
    opacity: 1;
    background: red;
}

修改 App.js 给 CSSTransition 添加 appear 属性:

import React from 'react';
import './App.css'
import {CSSTransition} from 'react-transition-group';
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isShow: true
        }
    }
    render() {
        return (
            <div>
                <CSSTransition in={this.state.isShow}
                               classNames={'box'}
                               timeout={3000}
                               unmountOnExit={true}
                               appear
                >
                    <div/>
                </CSSTransition>
                <button onClick={() => {
                    this.setState({
                        isShow: true
                    })
                }}>显示
                </button>
                <button onClick={() => {
                    this.setState({
                        isShow: false
                    })
                }}>隐藏
                </button>
            </div>
        );
    }
}
export default App;

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
2月前
|
前端开发 JavaScript
React 组件生命周期
React 组件生命周期
30 0
|
26天前
|
前端开发 JavaScript
react 组件的生命周期
React组件的生命周期包括从创建到销毁的各个阶段,如挂载(mounting)、更新(updating)和卸载(unmounting)。每个阶段都有特定的方法,用于控制组件的行为和状态,确保高效、有序地渲染和管理UI。
|
3月前
|
前端开发 JavaScript 开发者
介绍一下React生命周期
介绍一下React生命周期
105 9
|
2月前
|
存储 前端开发 JavaScript
深入理解React组件的生命周期与Hooks
【10月更文挑战第7天】深入理解React组件的生命周期与Hooks
104 0
|
4月前
|
前端开发 JavaScript
React的生命周期演示-新(12)
【8月更文挑战第15天】React的生命周期演示-新
49 5
React的生命周期演示-新(12)
|
4月前
|
前端开发 JavaScript
React的生命周期简介(十)
【8月更文挑战第15天】React的生命周期简介
48 2
React的生命周期简介(十)
|
3月前
|
前端开发 API UED
React组件生命周期详解
【9月更文挑战第4天】在React应用开发中,掌握组件生命周期对于管理状态和属性至关重要,并能有效提升应用性能。本文详细介绍了React组件生命周期的三个阶段:挂载、更新和卸载,并通过代码示例展示了如何避免状态更新导致的死循环及优化网络请求等问题,帮助开发者构建更高效、可维护的应用。
86 2
|
4月前
|
前端开发 JavaScript
React 组件的生命周期阶段详解
【8月更文挑战第30天】
48 7
|
4月前
|
前端开发 JavaScript
React 组件生命周期方法详解
【8月更文挑战第30天】
51 5
|
4月前
|
前端开发 JavaScript
React的生命周期演示-旧(11)
【8月更文挑战第15天】React的生命周期演示-旧(11)
33 3