0

反応レコードでReactRBを使用しようとしています。

したがって、取引はレンダリング部分にあると思います。React Component クラスで設定param :user, type: Userしているときに、テーブルにデータが表示されません。もちろん、ReactRB でのこの要件として、パブリック フォルダーのモデル ユーザー。

さて、コンソールでは、サーバーが何も取得していないことがわかりますが、正しいデータが返されました.

私は何が欠けていますか?助けてくれてありがとう!

答えの鍵は このスクリーンショットにあります

詳細は、json blob リアクティブ レコードがデコードするときにデータがサーバーから返されることですが、単純な文字列を json 解析しようとするとエラーが発生するという事実に基づいています。opal 0.10 では標準エラーが発生しなくなったため、すべてがハングアップします。

4

2 に答える 2

2

これについて考えるだけで... Opal https://github.com/opal/opal/issues/1545には既知の問題があり、これにより反応レコードに問題が発生します。opal 0.10 を使用していないことを確認してください。

于 2016-08-25T22:08:53.433 に答える
1

覚えておくべきことの 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までお問い合わせください。

于 2016-08-25T18:19:17.877 に答える