2017-08-31 10 views
1

official docsに記載されている例と非常によく似ています。 React:コンポーネントのforceUpdate/renderをトリガする方法(クラスではない)?

//Clock.jsx 
function Clock(props) { 

    setInterval(()=>{ 
    // ??? how to trigger forceUpdate/render here??? 
    }, 1000); 


    return (
    <div> 
     <h2>It is {new Date().toLocaleTimeString()}.</h2> 
    </div> 
); 
} 
export default Clock; 

そしてのは、このファイルをインポート一部の親コンポーネントとしましょう:我々は機能(ないクラス)として提示されたクロック成分を、持っているとしましょう

//index.jsx 
import Clock from 'Clock' 

.. 
render(){ return (
    <div> 
    <Clock /> 
    </div>); 
} 
.. 

を行うにはどのような方法がありますそれは時計をクラスにすることなくそれですか?

+1

コンポーネントがタイマーを保持しているという事実は、コンポーネントをステートフルにしているので、クラス(これは些細なものになるはずです)でなければならないと主張できます。 –

答えて

0

setIntervalを親クラスに移動し、ClockコンポーネントがClockの小道具としてレンダリングする値を渡すことができます。

setIntervalを親クラス内のcomponentDidMountに設定し、コールバックをgetCurrentTimeという関数(return new Date().toLocaleTimeString())に設定します。それは時計の小道具を更新するレンダリングをトリガーします。

これにより、スマートコンポーネントによって渡された情報のみが表示されるため、Clockコンポーネントは適切にダムコンポーネントになります。

+0

お返事ありがとうございますが、 'setInterval'は私有のカプセル化されたClockのロジックです。私はその子のすべての私的実装の詳細を親に知りたくありません –

+0

もしそうなら、Clockをクラスにする必要があります自分の状態を維持する。あなたが現在時計を持っているようなプレゼンテーションコンポーネントのポイントは、彼らは状態を保持せず、彼らが親によって与えられたものだけを提示するということです。希望が助けてくれる! – DillGromble

関連する問題