React 中动画的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dufu1991
V2EX    React

React 中动画的问题

  •  
  •   dufu1991
    dufu1991 2024-09-11 22:21:24 +08:00 2306 次点击
    这是一个创建于 461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 React 菜鸟,帮我看一下这个代码:

    // ... const [show,setShow]=useState(false) const showFn=()=>{ setShow(!show) } //... <div style={{left:show?'0px':'100px'}}></div> //... 

    这段代码中,根据 show 的值修改这个定位元素的 left ,并且切换的时候这个元素是有过渡效果的,但是因为状态改变导致整个组件重新渲染,那么这个过渡效果就失效了。 要如何解决?

    anyilin
        1
    anyilin  
       2024-09-11 23:50:41 +08:00   1
    虽然通过这几行看不出来你所谓的过渡效果是怎么实现的,但只论过渡效果,除非要实现复杂的动画,否则和 React ,或者说和 js 没什么关系。给这个 div 一个 class ,内容类似.transition-left { transition: left 0.3s ease },应该就可以了。
    dufu1991
        2
    dufu1991  
    OP
       2024-09-12 08:54:30 +08:00
    就是使用 transition: left 0.3s ease ,但是每次修改 show 的值的时候,整个组件重新渲染了,导致动画的初始状态变回去了,就没有动画效果了。
    Yukiniro
        3
    Yukiniro  
       2024-09-12 09:31:11 +08:00   1
    组件渲染不会导致动画失效,除非是节点结构产生了变化。如果有这个问题应该是你其他代码导致的。这里有一个示例可以看下: https://stackblitz.com/edit/vitejs-vite-fhycqw?file=src%2FApp.jsx
    dufu1991
        4
    dufu1991  
    OP
       2024-09-12 09:48:27 +08:00
    破案了,是使用 Context 是,如果将组件包裹在 Provider 内就会出现这种问题,也有可能是 Context 使用的不对,我再研究下。
    wktrf
        5
    wktrf  
       2024-09-12 16:02:09 +08:00   1
    @dufu1991 #4 React Context 仅用来共享对象实例(例如 eventbus 实例)就够了,不要在 Context Provider 中触发任何状态变化
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4560 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:52 PVG 17:52 LAX 01:52 JFK 04:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86