@@ -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
4157end
0 commit comments