質問するログイン新規登録

Q&A

解決済

1回答

212閲覧

railsのviewでreact.jsがレンダリングした値をrailsが扱えるように取得したい

bbTeratail

総合スコア3

Ruby on Rails 8

Ruby on Rails 8は、2024年11月にリリースされたRuby on Railsのバージョン8。SQLiteが強化されたSolidツールのほか、DockerコンテナのデプロイツールであるKamal 2、HTTP/2プロキシのThrusterなどの機能が追加されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2025/11/11 05:45

編集2025/11/11 05:54

0

0

### 実現したいこと
railsのviewでreact.jsがレンダリングした値をrailsが扱えるように取得したい。

### 前提
Rails: 8.0.2
react: "19.2.0"
react-dom: "19.2.0"

railsのviewでreactが取得した値を以下のように表示させました。
(Rails)
app/view/layouts/application.html.erb」

<%= javascript_include_tag "search01", "data-turbo-track": "reload", type: "module" %> に、search01を指定。

「app/view/search.html.erb」

<div id="search01"></div>

を、記載。

(React)
「app/javascript/search01.jsx」

const root = createRoot(document.getElementById('search01')); ここに"search01"を記載し ① に正常に値がレンダリングされるのを確認しました。 ※値は、reactが返した単に数値です。

### 今回実現したいこと・発生している問題・エラーメッセージ

やりたいことは、
①でWeb上に表示された値を以下view内のform_withで
controller: search
action: calc01
に送信する。

「app/view/search.html.erb」

<div id="search01" ></div>

<%= form_with url: search_calc01_path, method: :get do |f| %>
<%= hidden_field_tag :tmp01, nil, {id: :search01} %> ②(この書式自体が?!になっている)
<%= hidden_field_tag :tmp02, "999.999" %> ③(テストとして臨時記載)
<%= f.submit "送信" %>
<% end %>

※ tmp01、tmp02はここだけの名前

### 試したこと・結果

上記、form_withで送信すると、テストで臨時記載してある③は正常に送信されていることは確認しているが、
②は以下ログのように取得できていない。

Parameters: {"tmp01" => "", "tmp02" => "999.999", "commit" => "送信"}

(推測・結論)
(1)②の書式が間違っている?!何かが足りない?!、{id: :search01}でhtml要素は指定出来ない?!
(2)そもそもフロントエンドとバックエンドではデータ送信レイヤーが異なり仕組みが元来ない。
ただ、自環境のreactは、railsと別ポートではなく、railsプロジェクト内で動作してるからなんとかなるのかも?!
とタカをくくっています。

** ※ ご教授宜しくお願い致します!!!**

### 補足情報
次に、
stimulusのcontrollerとして動作させようと思っておりますが既存資産でまず動作させたいです。

どうぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Reactをマウントするdiv#search01form_withの内側に入れて、そしてReactサイドで<input type="hidden">を生成しましょう。

投稿2025/11/11 06:16

maisumakun

総合スコア146918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bbTeratail

2025/11/11 07:46

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 //////////////////////////////////////////////////////// お世話になります。 お早い回答ありがとうございます。 送信出来ました!!! ご教授頂いた通り、 <div id="search01"></div> をform_withに移動。 jsxで、 return <div> <input type="hidden" name="tmp01" id="search01" value={this.state.calc01} autocomplete="off" /> </div>; としたらいとも簡単に送信が出来ました!!! これによって止まっていた作業が進みます。 本当にありがとうございます。 基本なんでしょうね・・・もっと精進&勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問