React里使用動畫不生效的一些思考

項目中需要做這樣的一個組件


image.png

根據(jù)不同的數(shù)值片效,這個藍色的條顯示的寬度不同。
這個其實很簡單英古,我只要根據(jù)數(shù)據(jù)動態(tài)的計算它的寬度淀衣,生成節(jié)點就行了。
其中的部分react代碼如下

{data && data.length > 0
          ? data.map((item, index) => (
              <div className={styles.item} key={index}>
                <div className={styles.itemTop}>
                  <span>{item.name || item.label}</span>
                  <span className={styles.num}>{item.value}</span>
                </div>
                <p className={styles.progressBar}>
                  <span
                    className={styles.inner}
                    style={{ background, width:  getWidth(item.value)}
 
                  />
                </p>
              </div>
            ))
          : null}

這樣就實現(xiàn)如上圖所示的功能顯示召调,但是現(xiàn)在又有個需求膨桥,就是需要那個藍色的條剛加載的時候動起來。

transition

我一開始就想到了css的transition屬性唠叛,然后把它加入代碼中

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

可是這個動畫并沒有生效只嚣。

然后我就回過頭來思考它為什么沒有生效?
transition這個屬性只有在width屬性發(fā)生改變的時候才會產(chǎn)生作用〔J現(xiàn)在只能說明span的width并沒有發(fā)生改變介牙。
這時候就要說到我的這段代碼了,它是一邊計算寬度澳厢,一邊渲染節(jié)點的环础,也就是說它節(jié)點生成的時候,寬度就已經(jīng)定好了剩拢。所以transition當然不會生效了

現(xiàn)在我要怎么改進這段代碼使動畫生效呢线得?

我只能先讓節(jié)點生成好,然后再改變它的寬度了徐伐。
這就想到了react中的ref屬性了贯钩,這個屬性接受字符串或者一個函數(shù),而這個函數(shù)在節(jié)點加載完成后或者節(jié)點銷毀前都會觸發(fā)办素,然后我就可以通過這個函數(shù)返回的參數(shù)角雷,操作這個節(jié)點改變寬度了,這正是我所需要的性穿。
有了思路勺三,開始改進代碼。

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

然后打開瀏覽器看結(jié)果需曾,果然成功了吗坚。
效果如下。


7月-19-2018 18-05-36.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呆万,一起剝皮案震驚了整個濱河市商源,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谋减,老刑警劉巖牡彻,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逃顶,居然都是意外死亡讨便,警方通過查閱死者的電腦和手機充甚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霸褒,“玉大人伴找,你說我怎么就攤上這事》狭猓” “怎么了技矮?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殊轴。 經(jīng)常有香客問我衰倦,道長,這世上最難降的妖魔是什么旁理? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任樊零,我火速辦了婚禮,結(jié)果婚禮上孽文,老公的妹妹穿的比我還像新娘驻襟。我一直安慰自己,他們只是感情好芋哭,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布沉衣。 她就那樣靜靜地躺著,像睡著了一般减牺。 火紅的嫁衣襯著肌膚如雪豌习。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天拔疚,我揣著相機與錄音肥隆,去河邊找鬼。 笑死稚失,一個胖子當著我的面吹牛巷屿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墩虹,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼憨琳!你這毒婦竟也來了诫钓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤篙螟,失蹤者是張志新(化名)和其女友劉穎菌湃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遍略,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡惧所,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年骤坐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片下愈。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纽绍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出势似,到底是詐尸還是另有隱情拌夏,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布履因,位于F島的核電站障簿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栅迄。R本人自食惡果不足惜站故,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毅舆。 院中可真熱鬧西篓,春花似錦、人聲如沸朗兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽余掖。三九已至寸爆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盐欺,已是汗流浹背赁豆。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冗美,地道東北人魔种。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像粉洼,于是被迫代替她去往敵國和親节预。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5属韧? 答:HTML5是最新的HTML標準安拟。 注意:講述HT...
    kismetajun閱讀 27,486評論 1 45
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font宵喂,text-align糠赦,li...
    love2013閱讀 2,315評論 0 11
  • 北京時間5月27日凌晨,2017-2018賽季歐冠決賽落下帷幕,皇馬憑借貝爾梅開二度和本澤馬的進球3-1擊敗利物浦...
    愛做夢的阿仔閱讀 149評論 0 1
  • 我們的情緒,可以從六個維度去考察 自我察覺 當我們的情緒起來的時候顾瞻,在情緒爆發(fā)之前泼疑,能否很快的察覺情緒。 情緒的調(diào)...
    上善若水在路上閱讀 321評論 0 0
  • 在溫順的良夜里 行走在空曠而敞亮的街道上 雨在此時便成了無法抗拒的毒品 偶爾風從背后刮過來 樹上的水滴便俯沖至路人...
    弱水三瓢閱讀 164評論 0 0