class RenderReact::Context
Attributes
app[R]
mode[R]
Public Class Methods
new(javascript_source = nil, mode: :client_and_server)
click to toggle source
# File lib/render_react/context.rb, line 9 def initialize(javascript_source = nil, mode: :client_and_server) if javascript_source == nil @app = nil @mode = :client_only else @app = ExecJS.compile(javascript_source) @mode = mode end end
Public Instance Methods
on_client(component_name, props_hash = {})
click to toggle source
# File lib/render_react/context.rb, line 33 def on_client(component_name, props_hash = {}) component_uuid = SecureRandom.uuid props_json = JSON.dump(props_hash) "<div id=\"RenderReact-#{component_uuid}\"></div><script>#{client_script(component_name, props_json, component_uuid)}</script>" end
on_client_and_server(component_name, props_hash = {})
click to toggle source
# File lib/render_react/context.rb, line 48 def on_client_and_server(component_name, props_hash = {}) if mode == :client_only raise ArgumentError, "Context mode is :client_only, create a server context to be able to use server-side rendering" end component_uuid = SecureRandom.uuid props_json = JSON.dump(props_hash) server_rendered = app.eval(server_script(component_name, props_json)) "<div id=\"RenderReact-#{component_uuid}\">#{server_rendered}</div><script>#{client_script(component_name, props_json, component_uuid)}</script>" end
Also aliased as: on_server_and_client
on_server(component_name, props_hash = {})
click to toggle source
# File lib/render_react/context.rb, line 39 def on_server(component_name, props_hash = {}) if mode == :client_only raise ArgumentError, "Context mode is :client_only, create a server context to be able to use server-side rendering" end props_json = JSON.dump(props_hash) app.eval(server_script(component_name, props_json, true)) end
render_react(*args)
click to toggle source
# File lib/render_react/context.rb, line 19 def render_react(*args) case mode when :client, :client_only on_client(*args) when :server on_server(*args) when :client_and_server, :server_and_client on_client_and_server(*args) else raise ArgumentError, "unknown render mode" end end
Also aliased as: call
Private Instance Methods
client_script(component_name, props_json, uuid)
click to toggle source
# File lib/render_react/context.rb, line 62 def client_script(component_name, props_json, uuid) "RenderReact.ReactDOM.render(RenderReact.React.createElement(RenderReact.components.#{component_name}, #{props_json}), document.getElementById('RenderReact-#{uuid}'))" end
server_script(component_name, props_json, static = false)
click to toggle source
# File lib/render_react/context.rb, line 66 def server_script(component_name, props_json, static = false) render_method = static ? 'renderToStaticMarkup' : 'renderToString' "RenderReact.ReactDOMServer.#{render_method}(RenderReact.React.createElement(RenderReact.components.#{component_name}, #{props_json}))" end