有一點要記住的是,反應記錄延遲加載記錄和屬性。因此,除非渲染中的某個位置,否則您將訪問特定記錄/屬性,該屬性不會顯示在客戶端上。
它很難告訴更多的沒有更多的代碼的有點快,但這裏有一些幫助:
比方說你的組件看起來是這樣的:
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進入上面的紅寶石...紅寶石方法都開始$)
然後你可以這樣做:
Opal.User.$first().$name()
你甚至可以做到這一點(假設有至少2個用戶模型):
Opal.User.$find(2).$name()
你應該有類似「DummyValue」的返回,但是隨後會在控制檯中有一個服務器獲取循環,那麼如果你重複上述命令,你將獲得實際值!
這可能不是有關詳細信息,最好的論壇,如果你需要https://gitter.im/reactrb/chat更多的幫助下降