2017-04-19 11 views
0

タイムアウト後に関数をreturn trueにします。これはできますか?関数は、setTimeout(shouldComponentUpdate)の後にtrueを返します。

反応でそれを使用します。shouldComponentUpdate()メソッド。 trueが返されると、コンポーネントがレンダリングされます。私はタイムアウト後にレンダリングしたい。私がこれまでに発見したものを

はこれをですが、期待どおりに動作しません:

shouldComponentUpdate(nextProps, nextState) { 
    var promise = new Promise(function(resolve, reject) { 
    window.setTimeout(function() { 
     resolve(true); 
    }, 3000); 
    }); 
    return promise; 
} 

shouldComponentUpdate()べきreturn true 3秒後。

+1

はそれを行うためのあなたの目的は何ですか? 'shouldComponentUpdate'は同期する必要があります。 – CodinCat

+0

あなたはポーリングのようなことをしようとしていますか? – CodinCat

+0

コンポーネントをアニメーション化できるようにレンダリングを遅延させたい。この遅延の間にコンポーネントが更新された場合は、複数の時間を再レンダリングするのではなく、リセットする必要があります。 –

答えて

0

shouldComponentUpdateは、すぐに真偽値を返す必要があります。それは同期的かつ高速でなければならない。

通常、実際のDOM操作をアニメーションのようにしたい場合は、componentDidUpdate()で行うことができます。

しかし、アニメーションをより先にに再レンダリングしたいようです。あなたのコンポーネントが純粋に小道具に依存している場合、最も簡単な方法は、アニメーションコードをcomponentWillReceiveProps()に置き、falseshouldComponentUpdate()に返すだけです。アニメーションの後に、this.forceUpdate()を呼び出して、再レンダリングを強制します。

私が想像できる別の方法は、コンポーネントを別のコンポーネントでラップすることです。更新があると、親は3秒間の変更を保持し、アニメーションを行います。その後、親は新しい小道具を子供に渡します。

(溶液1については、shouldComponentUpdate代わりのcomponentWillReceivePropsも動作しますが、componentWillReceivePropsは私に良く見える使用)

関連する問題