2015-12-14 17 views
1

我試圖在反應的componentDidMount方法中使用GreenStock TweenMax,但我看到動畫未觸發(但onComplete'onStart方法正好觸發)。我嘗試了一些基於預感的東西,發現當我在100ms內添加一個setTimeout時,動畫就會播放。直覺就是在GreenStock被召喚的時候,元素並沒有真正準備好。tweenMax.to不能在反應組件中工作DidMount

我的印象是,componentDidMount類似於jQuery的$(document).ready()

這裏是我的簡單的代碼(未經書面咖啡腳本的setTimeout:

componentDidMount: -> 
    commentList = React.findDOMNode(@refs.commentList) 
    console.log commentList 
    TweenMax.to commentList, 1,{opacity: 0,onComplete :-> console.log 'TL called'} 

元素被正確地返回commentList,但動畫不播放(但動畫回調)

這個代碼有什麼問題,或者有人知道反應之間的問題nd greenstock的tweenmax?

+0

你的右那'componentDidMount'應該在那個時候返回一個有效的元素。如果你要做一個'setTimeout(fn,0)',那麼它是否也能工作? – enjoylife

+0

你可以嘗試使用** ['this.forceUpdate();'](https://facebook.github.io/react/docs/component-api.html#forceupdate)**來重新渲染組件在調用TweenMax.to()調用之前調用'componentDidMount'方法。它雖然不被推薦,但可以在這裏證明是有用的,而不是'setTimeout'。 –

+0

@mattclemens使用'setTimeout(fn,0)'不起作用。工作的時間是'setTimeout(fn,1000)',這使我認爲應用程序存在某種滯後,因爲'componentDidMount'應該(邏輯上)只在該組件的所有內容位於DOM上時才被調用 – zero

回答

0

,所以我不得不DOM元素我是動畫require 'uuid'<div key={uuid()}></div>唯一鍵(原來我是做這與需要重新呈現的元素原料js和CSS3),以便消除它的工作