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

React 中动画的问题

  •  
  •   dufu1991 ·
    dufu1991 · 27 天前 · 952 次点击

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

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

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

    5 条回复
    anyilin
        1
    anyilin  
       27 天前   ❤️ 1
    虽然通过这几行看不出来你所谓的过渡效果是怎么实现的,但只论过渡效果,除非要实现复杂的动画,否则和 React ,或者说和 js 没什么关系。给这个 div 一个 class ,内容类似.transition-left { transition: left 0.3s ease },应该就可以了。
    dufu1991
        2
    dufu1991  
    OP
       26 天前
    就是使用 transition: left 0.3s ease ,但是每次修改 show 的值的时候,整个组件重新渲染了,导致动画的初始状态变回去了,就没有动画效果了。
    Yukiniro
        3
    Yukiniro  
       26 天前   ❤️ 1
    组件渲染不会导致动画失效,除非是节点结构产生了变化。如果有这个问题应该是你其他代码导致的。这里有一个示例可以看下: https://stackblitz.com/edit/vitejs-vite-fhycqw?file=src%2FApp.jsx
    dufu1991
        4
    dufu1991  
    OP
       26 天前
    破案了,是使用 Context 是,如果将组件包裹在 Provider 内就会出现这种问题,也有可能是 Context 使用的不对,我再研究下。
    wktrf
        5
    wktrf  
       26 天前   ❤️ 1
    @dufu1991 #4 React Context 仅用来共享对象实例(例如 eventbus 实例)就够了,不要在 Context Provider 中触发任何状态变化
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1551 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.