0

我只是想将ReactRB与反应记录一起使用。

所以我认为这笔交易是在渲染部分。当我param :user, type: UserReact Component 类中设置时,我的表中看不到任何数据。当然 Model User 在 public 文件夹中,作为 ReactRB 中的这个要求。

好吧,在控制台中,我看到服务器没有获取任何内容,但返回了正确的数据

我错过了什么?谢谢您的帮助!

答案的关键就 在这个截图中

详细信息是数据从服务器返回,因为 json blob 反应记录对其进行解码,但依赖于这样一个事实,即如果您尝试 json 解析一个简单的字符串,它会引发错误。opal 0.10 不再引发标准错误,所以整个事情就挂了。

4

2 回答 2

2

只是想一想... Opal https://github.com/opal/opal/issues/1545中有一个已知问题,这会导致反应记录出现问题。请确保您没有使用蛋白石 0.10

于 2016-08-25T22:08:53.433 回答
1

要记住的一件事是反应记录延迟加载记录和属性。因此,除非在渲染中的某个地方,否则您访问特定的记录/属性,该属性不会显示在客户端上。

如果没有发布更多代码,很难说出更多信息,但这里有一些帮助:

假设您的组件如下所示:

class Foo < React::Component::Base
  param :user, type: User
  def render
    "user.name = #{user.name}"
  end
end

在控制器或布局中的某个地方执行以下操作:

render_component '::Foo', {user: User.first}

您可能会尝试一些非常简单的事情,只是为了熟悉事情的工作方式。

发生的事情应该是这样的:您将渲染您的视图,并且第一个用户的占位符将被发送到组件,在渲染期间,组件会查找该用户的 name 属性,它没有,因此排队等待从中获取服务器。渲染将完成,最终数据将从服务器下来,本地模型的数据将被更新,并且显示该数据的组件将被重新渲染。

在预渲染期间,上述所有操作都发生在服务器内部,当组件被渲染时,最终的 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 回答