【发布时间】:2017-02-22 10:04:36
【问题描述】:
我正在学习 React+Redux,但我不明白制作动画的正确方法。举个例子吧:
例如,我有一个列表,我想在点击时删除项目。如果我在那里没有动画效果,那将非常容易:点击时调度 REMOVE_ITEM 动作,reducer 从商店中删除项目并重新渲染 html。
让我们添加一个点击删除订单项的动画。所以,当用户点击一个项目时,我想运行一个奇特的订单项移除效果......如何?我可以想到几种方法来做到这一点:
1) 点击时我调度REMOVE_ITEM 动作,然后reducer 在Store 中将一个项目标记为goingToBeDeleted,然后react 使用.fancy-dissolve-animation 类渲染该元素,然后我运行一个计时器来调度第二个动作@987654325 @。我不喜欢这个想法,因为仍然不清楚如何在此处添加 JS 动画(例如,使用 TweenMax)并且我运行 JS 计时器以在 CSS 动画结束时重新渲染。不好听。
2) 我以约 30 毫秒的间隔调度 ITEM_REMOVE_PROGRESS 动作,并存储一些代表动画当前状态的“值”。我也不喜欢它,因为它需要我为约 2 秒的动画复制存储约 120 次(例如,我想要平滑的 60 fps 动画),这简直是浪费内存。
3) 制作动画并仅在动画完成后发送REMOVE_ITEM。这是我能想到的最合适的方式,但我仍然希望在用户做出操作后立即在商店中进行更改。例如,动画可能需要几秒钟以上的时间,REMOVE_ITEM 可能会与后端同步——没有理由等待动画完成来进行后端 API 调用。
感谢阅读——有什么建议吗?
【问题讨论】:
-
没有数据影响的动画应该在redux store之外。
-
@MaciejSikora 是的,完全同意这里 - 这就是我的感觉。但我仍然不知道实现这一目标的好方法是什么。 :(
标签: animation reactjs redux react-redux flux