Class: React::ServerRendering::ExecJSRenderer
- Inherits:
-
Object
- Object
- React::ServerRendering::ExecJSRenderer
- Defined in:
- lib/react/server_rendering/exec_js_renderer.rb
Direct Known Subclasses
Constant Summary collapse
- GLOBAL_WRAPPER =
Handle Node.js & other ExecJS contexts
<<-JS var global = global || this; var self = self || this; var window = window || this; JS
Instance Method Summary collapse
- #after_render(component_name, props, prerender_options) ⇒ Object
-
#before_render(component_name, props, prerender_options) ⇒ Object
Hooks for inserting JS before/after rendering.
-
#initialize(options = {}) ⇒ ExecJSRenderer
constructor
A new instance of ExecJSRenderer.
- #render(component_name, props, prerender_options) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ ExecJSRenderer
Returns a new instance of ExecJSRenderer.
7 8 9 10 |
# File 'lib/react/server_rendering/exec_js_renderer.rb', line 7 def initialize(={}) js_code = [:code] || raise("Pass `code:` option to instantiate a JS context!") @context = ExecJS.compile(GLOBAL_WRAPPER + js_code) end |
Instance Method Details
#after_render(component_name, props, prerender_options) ⇒ Object
29 |
# File 'lib/react/server_rendering/exec_js_renderer.rb', line 29 def after_render(component_name, props, ); ""; end |
#before_render(component_name, props, prerender_options) ⇒ Object
Hooks for inserting JS before/after rendering
28 |
# File 'lib/react/server_rendering/exec_js_renderer.rb', line 28 def before_render(component_name, props, ); ""; end |
#render(component_name, props, prerender_options) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/react/server_rendering/exec_js_renderer.rb', line 12 def render(component_name, props, ) render_function = .fetch(:render_function, "renderToString") js_code = <<-JS (function () { #{before_render(component_name, props, )} var result = React.#{render_function}(React.createElement(#{component_name}, #{props})); #{after_render(component_name, props, )} return result; })() JS @context.eval(js_code).html_safe rescue ExecJS::ProgramError => err raise React::ServerRendering::PrerenderError.new(component_name, props, err) end |