覚えておくべきことの 1 つは、リアクティブ レコードがレコードと属性を遅延ロードすることです。そのため、レンダーのどこかにアクセスしない限り、その属性がクライアントに表示されない特定のレコード/属性にアクセスします。
もう少しコードを投稿しないと詳細を伝えるのは難しいですが、ここにいくつかの助けがあります:
コンポーネントが次のようになっているとしましょう。
class Foo < React::Component::Base
param :user, type: User
def render
"user.name = #{user.name}"
end
end
そして、コントローラーまたはレイアウトのどこかでこれを行います:
render_component '::Foo', {user: User.first}
物事がどのように機能するかを理解するために、このような非常に単純なことを試すことができます。
何が起こるか: ビューをレンダリングし、最初のユーザーのプレースホルダーがコンポーネントに送信されます。コンポーネントのレンダリング中に、コンポーネントが持っていないそのユーザーの名前属性を検索するため、キューに入れられてフェッチされます。サーバー。レンダリングが完了し、最終的にデータがサーバーから取得され、ローカル モデルのデータが更新され、そのデータを表示するコンポーネントが再レンダリングされます。
事前レンダリング中、上記のすべてがサーバーの内部で発生し、コンポーネントがレンダリングされると、コンポーネントのレンダリングに使用されたすべてのモデル データとともに最終的な html が配信されます。したがって、最初のロードですべてが機能していれば、サーバーからのフェッチは表示されません。
したがって、上記の小さな例を試してから、JavaScript コンソールに移動すると、次のように言うことができます。
Opal.User.$first()
そして、基礎となるモデルのデータ構造が返されるのを見るでしょう (私は上記の JS から Ruby に変換しています... Ruby メソッドはすべて $ で始まります)
その後、これを行うことができます:
Opal.User.$first().$name()
そして、これを行うこともできます (少なくとも 2 つのユーザー モデルがあると仮定します):
Opal.User.$find(2).$name()
「DummyValue」のようなものが返されるはずですが、コンソールにサーバーフェッチサイクルが発生し、上記のコマンドを繰り返すと実際の値が返されます!!!
詳細については、https://gitter.im/reactrb/chatまでお問い合わせください。