老师我发现appear需要配合in=true才生效,我改成false是没有初始动画的

来源:16-8 react-transition-group模块实现动画功能

Panda_io

2023-05-26

import React, { useRef, useState} from 'react'
import './animate.scss'
import { CSSTransition } from 'react-transition-group'

export default function App() {
    const [prop, setProp] = useState(false)
    // 这只是CSSTransition的一个规范
    const nodeRef = useRef(null)
    const handleClick = () => {
        setProp(!prop)
    }
    const handleAnimateClick = () => {
        alert(666)
    }
    // timeout 控制选择器切换,也就是加类减去类的时间
    // 只有timeout = transition-duration过渡恰好正常执行完成
    // true执行enter逻辑,false执行exit逻辑

    return (
        <div className='Animate'>
            <div>04_animate</div>
            {prop ? 1 : 2}
            <button onClick={handleClick}>点击</button>
            <CSSTransition in={prop} timeout={1000} classNames="fade" nodeRef={nodeRef} 
                unmountOnExit onClick={handleAnimateClick} appear>
                <div className='box' ref={nodeRef} ></div>
            </CSSTransition>
        </div>
    )
}

css

.Animate {
    .box {
        width: 150px;
        height: 150px;
        background: red;
        opacity: 0;
    }

    .fade-enter {
        opacity: 0;
    }

    .fade-enter-active {
        opacity: 1;
        transition: 1s;
    }

    .fade-enter-done {
        opacity: 1;
    }

    .fade-exit {
        opacity: 1;
    }

    .fade-exit-active {
        opacity: 0;
        transition: 1s;
    }

    .fade-exit-done {
        opacity: 0;
    }

    .fade-apper {
        opacity: 0;
    }

    .fade-appear-active {
        opacity: 1;
        transition: 1s;
    }

    .fade-appear-done {
        opacity: 1;
        }
}
写回答

1回答

西门老舅

2023-05-26

这个你需要把 .box {        width: 150px;        height: 150px;        background: red;        opacity: 1;   // 这里改成1试一下    }


可以关注一下这个模块,也是做动画的:react-spring

0
1
Panda_io
好的老师,我网上搜了下,也看到有人说要in = {true},appear才会生效,我查阅官方文档但是文档中没有提及这个细节
2023-05-28
共1条回复

Vue3 + React18 + TS4入门到实战 系统学习3大热门技术

专为初级前端人员设计,系统性学习三大技术

261 学习 · 182 问题

查看课程