考える手順
下記のようなUIを作るときのHotwireのアプローチを、Reactと比べながら解説します。

Hotwireの場合は以下のように考えます。
aタグにしますaタグのhref属性の/users/2/user_profileは#user-profileに埋め込むべきHTMLを返してくれるサーバのエンドポイントですaタグのdata-turbo-frameは、サーバから帰ってきたHTMLをどこに埋め込むかを指定しています
Reactの場合は以下のように考えます。
onclickイベントハンドラを繋げて、クリックしたらselectedUserステートを2に更新しますUserProfileコンポーネントのpropsにステートselectedUser=2を渡し、UserProfileコンポーネントはselectedUser=2に該当するデータをサーバに要求しますUser.id=2に該当するUserの情報をJSONで返しますuserProfileステートにセットされますuserProfileステートを使って、virtual DOMを作成し、新しいUserProfileコンポーネントのHTMLを作りますUserProfileのHTMLと、現在ブラウザに表示されているものを比較して、差分を取り、差分を現在のブラウザ画面に当てはめます
selectedUserのステートを設定して、流れの中でUserProfileコンポーネントがサーバにデータを取りに行くようにします#user-profileにすぐに埋め込みます。Reactの場合は、サーバから帰ってきたデータをuserProfileステートに設定すると、流れの中で新しい情報が表示されるようになりますHotwireは目標に対して直接的に処理をしています。一方でReactはまずステートに着目して、これを変更した結果として流れの中で UIが適切に更新されるような仕掛けを用意しています。ステートを更新して間接的にUIを更新する仕組みです。
直接的ですので、通常はHotwireの方がシンプルでわかりやすいです。
参考までにjQueryのやり方を紹介します。

/users/2/user_profileにリクエストが飛ぶようにしますuser-profileに埋め込まれるようにしますjQueryのやり方はHotwireとよく似ていて、直接的です。やはりシンプルでわかりやすいです。