V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
deepkolos
V2EX  ›  分享创造

80 行代码实现 Preact-Transition 组件

  •  
  •   deepkolos ·
    deepkolos · 2020-05-08 17:21:57 +08:00 · 1507 次点击
    这是一个创建于 1689 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Preact 是 3kb 轻量化方案, 但是一些基础组件找起来比较困难, 用起来也比较别扭,其中一个就是 Transition 组件, 尝试过preact-transition-group, 但是直接 npm 安装使用就报错了...因为有 preact 版本兼容问题

    看了下源码

    transition.js

            // 这一行代码没兼容, 新版 preact children 不一定是都是数组
    359 -	const child = children[0]
        +	const child = children[0] || children 
    360     return cloneElement(child, childProps)
    

    但是看了 transition.js (391 行) + CSSTransition(181 行), 感觉不需要这么多行代码即可实现所需的 Transition 组件

    之前也写过弹窗过渡动画的组件, 也熟悉其生命周期, 所以简单梳理下状态变换流程就可以编写了

    状态扭转也两个分支:
    enter->entering->entered
    exit->exiting->exited
    
    而其中 4 个状态的流转可以由两个变量派生出来:show 和 switching
    enter/entered/exit/exited
    
    而 entering 则紧跟着 enter, exiting 则紧跟着 exit
    
    状态的对应关系:
    show && !switching => entered
    !show && !switching => exited
    show && switching => enter
    !show && switching => exit
    
    剩下就是加上 show 变化对 switching 的变化即可
    

    最终写下来只需要 80 行代码即可实现了

    1. 接口与 CSSTransition 类似
    2. 大概 80 行代码
    3. 无需设置 duration, duration 与 transition-duration 一样
    4. 无需繁琐设置 classNames 传递一个 className 即可, css 里配合 data-state 来命中状态

    使用 Preact 的同学可以尝试下, 简约框架搭配简约组件

    这里可以体验DEMO

    https://github.com/deepkolos/pc-transition

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:23 · PVG 02:23 · LAX 10:23 · JFK 13:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.