资讯专栏INFORMATION COLUMN

关于React中动画不生效的一些思考

baishancloud / 2369人阅读

摘要:项目中需要做这样的一个组件根据不同的数值,这个蓝色的条显示的宽度不同。我一开始就想到了的属性,然后把它加入代码中可是这个动画并没有生效。所以当然不会生效了现在我要怎么改进这段代码使动画生效呢我只能先让节点生成好,然后再改变它的宽度了。

项目中需要做这样的一个组件

根据不同的数值,这个蓝色的条显示的宽度不同。
这个其实很简单,我只要根据数据动态的计算它的宽度,生成节点就行了。
其中的部分react代码如下

{data && data.length > 0
          ? data.map((item, index) => (
              
{item.name || item.label} {item.value}

)) : null}

这样就实现如上图所示的功能显示,但是现在又有个需求,就是需要那个蓝色的条刚加载的时候动起来。

transition

我一开始就想到了css的transition属性,然后把它加入代码中

.inner {
        width: 0;
        transition: width 0.6s ease;
      }

可是这个动画并没有生效。

然后我就回过头来思考它为什么没有生效?
transition这个属性只有在width属性发生改变的时候才会产生作用。现在只能说明span的width并没有发生改变。
这时候就要说到我的这段代码了,它是一边计算宽度,一边渲染节点的,也就是说它节点生成的时候,宽度就已经定好了。所以transition当然不会生效了

现在我要怎么改进这段代码使动画生效呢?

我只能先让节点生成好,然后再改变它的宽度了。
这就想到了react中的ref属性了,这个属性接受字符串或者一个函数,而这个函数在节点加载完成后或者节点销毁前都会触发,然后我就可以通过这个函数返回的参数,操作这个节点改变宽度了,这正是我所需要的。
有了思路,开始改进代码。

{data && data.length > 0
          ? data.map((item, index) => (
              
{item.name || item.label} {item.value}

{ if (n && n.style) { n.style.width = `${getWidth(item.value)}px`; } }} />

)) : null}

然后打开浏览器看结果,果然成功了。
效果如下。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96264.html

相关文章

  • 上海 HTML5 峰会笔记整理与总结

    摘要:规则分为可能是错误,最佳实践,变量声明等等,贺前辈的建议是能用的规则都用上。峰会中奖品挺多的,可惜与我擦肩而过。 iWeb峰会的消息是在开场前两天才从朋友圈看到,稍微有点匆忙,只花了不到两个小时的时间了解下相关主题。发现涉及的知识还是蛮多的,甚至一些平时也没有接触过。所以一些关注点,理解的层次都很有限,甚至可能有误区,仅供参考及知识面的拓展。 工具应用类 峰会的主题是HTML5,又分为...

    tinyq 评论0 收藏0
  • 前端阅读 - 收藏集 - 掘金

    摘要:实现不定期更新技巧前端掘金技巧,偶尔更新。统一播放效果实现打字效果动画前端掘金前端开源项目周报前端掘金由出品的前端开源项目周报第四期来啦。 Web 推送技术 - 掘金腾讯云技术社区-掘金主页持续为大家呈现云计算技术文章,欢迎大家关注! 作者:villainthr 摘自 前端小吉米 伴随着今年 Google I/O 大会的召开,一个很火的概念--Progressive Web Apps ...

    lingdududu 评论0 收藏0
  • 前端窝 - 收藏集 - 掘金

    摘要:毫无疑问,设计模式于己于他人于系统都是多赢的设计模式使代码编写真正工程化设计模小书前端掘金这是一本关于的小书。 JavaScript 常见设计模式解析 - 掘金设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计...

    李文鹏 评论0 收藏0
  • 【译】ReactReact Fiber基本设计理念

    摘要:基础的理论概念这篇文章是我的一次尝试,希望能够形式化的介绍关于本身的一些理念模型。我对于此实际的理念模型是在每次的更新过程中返回下一个阶段的状态。的目标是提升对在动画,布局以及手势方面的友好度。我已经邀请了团队的成员来对本文档的准确性进行。 前言 本文主要是对收集到的一些官方或者其他平台的文章进行翻译,中间可能穿插一些个人的理解,如有错误疏漏之处,还望批评指正。笔者并未研究过源码,只是...

    lewif 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<