setState を呼び出さずに React コンポーネントを強制的に再レン​​ダリングできますか? 質問する

setState を呼び出さずに React コンポーネントを強制的に再レン​​ダリングできますか? 質問する

変更を監視したい外部 (コンポーネントに対して) の監視可能なオブジェクトがあります。オブジェクトが更新されると変更イベントが発行され、変更が検出されるとコンポーネントを再レンダリングします。

トップレベルでは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フックを使って強制的に更新する方法を考案する

おすすめ記事