Class: React::ServerRendering::SprocketsRenderer
- Inherits:
-
ExecJSRenderer
- Object
- ExecJSRenderer
- React::ServerRendering::SprocketsRenderer
- Defined in:
- lib/react/server_rendering/sprockets_renderer.rb
Overview
Extends ExecJSRenderer for the Rails environment
-
builds JS code out of the asset pipeline
-
stringifies props
-
implements console replay
Constant Summary collapse
- CONSOLE_POLYFILL =
Reimplement console methods for replaying on the client
File.read(File.join(File.dirname(__FILE__), "sprockets_renderer/console_polyfill.js"))
- CONSOLE_REPLAY =
File.read(File.join(File.dirname(__FILE__), "sprockets_renderer/console_replay.js"))
Constants inherited from ExecJSRenderer
ExecJSRenderer::GLOBAL_WRAPPER
Class Attribute Summary collapse
-
.asset_container_class ⇒ Object
Returns the value of attribute asset_container_class.
Instance Method Summary collapse
- #after_render(component_name, props, prerender_options) ⇒ Object
-
#asset_container ⇒ #find_asset(logical_path)
Get an object which exposes assets by their logical path.
- #assets_precompiled? ⇒ Boolean
-
#initialize(options = {}) ⇒ SprocketsRenderer
constructor
A new instance of SprocketsRenderer.
- #render(component_name, props, prerender_options) ⇒ Object
Methods inherited from ExecJSRenderer
Constructor Details
#initialize(options = {}) ⇒ SprocketsRenderer
Returns a new instance of SprocketsRenderer.
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 16 def initialize(={}) @replay_console = .fetch(:replay_console, true) filenames = .fetch(:files, ["react-server.js", "components.js"]) js_code = CONSOLE_POLYFILL.dup js_code << .fetch(:code, '') filenames.each do |filename| js_code << asset_container.find_asset(filename) end super(.merge(code: js_code)) end |
Class Attribute Details
.asset_container_class ⇒ Object
Returns the value of attribute asset_container_class.
49 50 51 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 49 def asset_container_class @asset_container_class end |
Instance Method Details
#after_render(component_name, props, prerender_options) ⇒ Object
44 45 46 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 44 def after_render(component_name, props, ) @replay_console ? CONSOLE_REPLAY : "" end |
#asset_container ⇒ #find_asset(logical_path)
Get an object which exposes assets by their logical path.
Out of the box, it supports a Sprockets::Environment (application.assets) and a Sprockets::Manifest (application.assets_manifest), which covers the default Rails setups.
You can provide a custom asset container with ‘React::ServerRendering::SprocketsRender.asset_container_class = MyAssetContainer`.
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 62 def asset_container @asset_container ||= if self.class.asset_container_class.present? self.class.asset_container_class.new elsif assets_precompiled? && ManifestContainer.compatible? ManifestContainer.new elsif assets_precompiled? && YamlManifestContainer.compatible? YamlManifestContainer.new else EnvironmentContainer.new end end |
#assets_precompiled? ⇒ Boolean
74 75 76 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 74 def assets_precompiled? !::Rails.application.config.assets.compile end |
#render(component_name, props, prerender_options) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/react/server_rendering/sprockets_renderer.rb', line 29 def render(component_name, props, ) # pass prerender: :static to use renderToStaticMarkup react_render_method = if == :static "renderToStaticMarkup" else "renderToString" end if !props.is_a?(String) props = props.to_json end super(component_name, props, {render_function: react_render_method}) end |