首页 > web前端 > js教程 > 正文

React中动画不生效的原因分析

不言
发布: 2018-07-20 11:16:49
原创
1842 人浏览过

这篇文章给大家介绍的内容是关于React中动画不生效的原因分析,有着一定的参考价值,有需要的朋友可以参考一下。

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

{data && data.length > 0
          ? data.map((item, index) => (
              <p className={styles.item} key={index}>
                <p className={styles.itemTop}>
                  <span>{item.name || item.label}</span>
                  <span className={styles.num}>{item.value}</span>
                </p>
                <p className={styles.progressBar}>
                  <span
                    className={styles.inner}
                    style={{ background, width:  getWidth(item.value)}
 
                  />
                </p>
              </p>
            ))
          : 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) => (
              <p className={styles.item} key={index}>
                <p className={styles.itemTop}>
                  <span>{item.name || item.label}</span>
                  <span className={styles.num}>{item.value}</span>
                </p>
                <p className={styles.progressBar}>
                  <span
                    className={styles.inner}
                    style={{ background }}
                    ref={n => {
                      if (n && n.style) {
                        n.style.width = `${getWidth(item.value)}px`;
                      }
                    }}
                  />
                </p>
              </p>
            ))
          : null}
登录后复制

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

7月-19-2018 18-05-36.gif

相关推荐:

js如何实现将上传图片并且压缩的方法

react的使用: React如何渲染UI

以上是React中动画不生效的原因分析的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!