変更を監視したい外部 (コンポーネントに対して) の監視可能なオブジェクトがあります。オブジェクトが更新されると変更イベントが発行され、変更が検出されるとコンポーネントを再レンダリングします。
トップレベルではReact.render
これは可能ですが、コンポーネント内では機能しません (メソッドはrender
オブジェクトを返すだけなので、これはある程度理にかなっています)。
コード例を次に示します。
export default class MyComponent extends React.Component {
handleButtonClick() {
this.render();
}
render() {
return (
<div>
{Math.random()}
<button onClick={this.handleButtonClick.bind(this)}>
Click me
</button>
</div>
)
}
}
ボタンをクリックすると内部的に が呼び出されますthis.render()
が、実際にレンダリングが行われるのはそれが原因ではありません ( によって作成されたテキストは{Math.random()}
変更されないため、この動作を確認できます)。ただし、this.setState()
の代わりにを呼び出すだけでthis.render()
、正常に動作します。
私の質問は、 React コンポーネントを再レンダリングするために状態が必要なのかということです。状態を変更せずに、コンポーネントをオンデマンドで強制的に更新する方法はありますか?
ベストアンサー1
クラス コンポーネントでは、this.forceUpdate()
を呼び出して強制的に再レンダリングすることができます。
ドキュメンテーション:コンポーネントAPI
関数コンポーネントには に相当するものはありませんforceUpdate
が、useState
フックを使って強制的に更新する方法を考案する。