Skip to content

Commit 05ef277

Browse files
committed
Extract methods from #render at ExecJS Renderer to ease inheritance and reuse
1 parent bc2f80a commit 05ef277

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

lib/react/server_rendering/exec_js_renderer.rb

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,10 @@ def initialize(options={})
1111
end
1212

1313
def render(component_name, props, prerender_options)
14-
render_function = prerender_options.fetch(:render_function, "renderToString")
15-
js_code = <<-JS
16-
(function () {
17-
#{before_render(component_name, props, prerender_options)}
18-
var result = ReactDOMServer.#{render_function}(React.createElement(#{component_name}, #{props}));
19-
#{after_render(component_name, props, prerender_options)}
20-
return result;
21-
})()
22-
JS
23-
@context.eval(js_code).html_safe
14+
js_executed_before = before_render(component_name, props, prerender_options)
15+
js_executed_after = after_render(component_name, props, prerender_options)
16+
js_main_section = main_render(component_name, props, prerender_options)
17+
render_from_parts(js_executed_before, js_main_section, js_executed_after)
2418
rescue ExecJS::ProgramError => err
2519
raise React::ServerRendering::PrerenderError.new(component_name, props, err)
2620
end
@@ -36,6 +30,28 @@ def after_render(component_name, props, prerender_options); ""; end
3630
var window = window || this;
3731
JS
3832

33+
private
34+
35+
def render_from_parts(before, main, after)
36+
js_code = compose_js(before, main, after)
37+
@context.eval(js_code).html_safe
38+
end
39+
40+
def main_render(component_name, props, prerender_options)
41+
render_function = prerender_options.fetch(:render_function, "renderToString")
42+
"ReactDOMServer.#{render_function}(React.createElement(#{component_name}, #{props}))"
43+
end
44+
45+
def compose_js(before, main, after)
46+
<<-JS
47+
(function () {
48+
#{before}
49+
var result = #{main};
50+
#{after}
51+
return result;
52+
})()
53+
JS
54+
end
3955
end
4056
end
4157
end

0 commit comments

Comments
 (0)