要记住的一件事是反应记录延迟加载记录和属性。因此,除非在渲染中的某个地方,否则您访问特定的记录/属性,该属性不会显示在客户端上。
如果没有发布更多代码,很难说出更多信息,但这里有一些帮助:
假设您的组件如下所示:
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以获得更多帮助,这可能不是了解更多详细信息的最佳论坛