Class: React::Rails::ComponentMount

Inherits:
Object
  • Object
show all
Includes:
ActionView::Helpers::TagHelper, ActionView::Helpers::TextHelper
Defined in:
lib/react/rails/component_mount.rb

Overview

This is the default view helper implementation. It just inserts HTML into the DOM (see #react_component).

You can extend this class or provide your own implementation by assigning it to `config.react.view_helper_implementation`.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#output_bufferObject

Returns the value of attribute output_buffer


11
12
13
# File 'lib/react/rails/component_mount.rb', line 11

def output_buffer
  @output_buffer
end

Instance Method Details

#react_component(name, props = {}, options = {}, &block) ⇒ Object

Render a UJS-type HTML tag annotated with data attributes, which are used by react_ujs to actually instantiate the React component on the client.


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/react/rails/component_mount.rb', line 26

def react_component(name, props = {}, options = {}, &block)
  options = { :tag => options } if options.is_a?(Symbol)
  if options.fetch(:camelize_props, camelize_props_switch)
    props = React.camelize_props(props)
  end

  prerender_options = options[:prerender]
  if prerender_options
    block = Proc.new{ concat(prerender_component(name, props, prerender_options)) }
  end

  html_options = options.reverse_merge(:data => {})
  unless prerender_options == :static
    html_options[:data].tap do |data|
      data[:react_class] = name
      data[:react_props] = (props.is_a?(String) ? props : props.to_json)
      data[:hydrate] = 't' if prerender_options
    end
  end
  html_tag = html_options[:tag] || :div

  # remove internally used properties so they aren't rendered to DOM
  html_options.except!(:tag, :prerender, :camelize_props)

  rendered_tag = (html_tag, '', html_options, &block)
  if React::ServerRendering.renderer_options[:replay_console]
    # Grab the server-rendered console replay script
    # and move it _outside_ the container div
    rendered_tag.sub!(/\n(<script class="react-rails-console-replay">.*<\/script>)<\/(\w+)>$/m,'</\2>\1')
    rendered_tag.html_safe
  else
    rendered_tag
  end
end

#setup(controller) ⇒ Object

React::Rails::ControllerLifecycle calls these hooks You can use them in custom helper implementations


16
17
18
# File 'lib/react/rails/component_mount.rb', line 16

def setup(controller)
  @controller = controller
end

#teardown(controller) ⇒ Object


20
21
# File 'lib/react/rails/component_mount.rb', line 20

def teardown(controller)
end