Skip to content

Commit 298f23b

Browse files
committed
feat(SprocketsRenderer) use prerender: :static
1 parent 61170a2 commit 298f23b

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/react/server_rendering/sprockets_renderer.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,19 @@ def initialize(options={})
1010
end
1111

1212
def render(component_name, props)
13+
# pass prerender: :static to use renderToStaticMarkup
14+
react_render_method = "renderToString"
15+
if props.is_a?(Hash) && props[:prerender] == :static
16+
react_render_method = "renderToStaticMarkup"
17+
end
18+
1319
if !props.is_a?(String)
1420
props = props.to_json
1521
end
1622

1723
js_code = <<-JS
1824
(function () {
19-
var result = React.renderToString(React.createElement(#{component_name}, #{props}));
25+
var result = React.#{react_render_method}(React.createElement(#{component_name}, #{props}));
2026
#{@replay_console ? CONSOLE_REPLAY : ""}
2127
return result;
2228
})()

test/react/server_rendering/sprockets_renderer_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ class SprocketsRendererTest < ActiveSupport::TestCase
1616
assert_match(/<li.*write more tests<\/li>/, result)
1717
end
1818

19+
test '#render accepts prerender: :static' do
20+
result = @renderer.render("Todo", {todo: "write more tests", prerender: :static})
21+
assert_match(/<li>write more tests<\/li>/, result)
22+
assert_no_match(/data-react-checksum/, result)
23+
end
24+
1925
test '#render replays console messages' do
2026
result = @renderer.render("TodoListWithConsoleLog", {todos: ["log some messages"]})
2127
assert_match('console.log.apply(console, ["got initial state"])', result)

0 commit comments

Comments
 (0)