Module: React::Component
- Included in:
- Components::HelloWorld, Components::Todo, TopLevelRailsComponent
- Defined in:
- lib/react/component.rb,
lib/react/component/api.rb,
lib/react/component/base.rb,
lib/react/component/tags.rb,
lib/react/component/class_methods.rb,
lib/react/component/props_wrapper.rb,
lib/react/component/dsl_instance_methods.rb
Defined Under Namespace
Modules: API, ClassMethods, DslInstanceMethods, Tags
Classes: Base, PropsWrapper
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#_render_wrapper ⇒ Object
-
#component_did_mount ⇒ Object
-
#component_did_update(prev_props, prev_state) ⇒ Object
-
#component_will_mount ⇒ Object
-
#component_will_receive_props(next_props) ⇒ Object
-
#component_will_unmount ⇒ Object
-
#component_will_update(next_props, next_state) ⇒ Object
-
#define_state(*args, &block) ⇒ Object
-
#deprecated_params_method(name, *args, &block) ⇒ Object
-
#emit(event_name, *args) ⇒ Object
-
#initialize(native_element) ⇒ Object
-
#props_changed?(next_props) ⇒ Boolean
-
#render ⇒ Object
-
#should_component_update?(next_props, next_state) ⇒ Boolean
-
#update_react_js_state(object, name, value) ⇒ Object
-
#watch(value, &on_change) ⇒ Object
Instance Attribute Details
#waiting_on_resources ⇒ Object
Returns the value of attribute waiting_on_resources.
139
140
141
|
# File 'lib/react/component.rb', line 139
def waiting_on_resources
@waiting_on_resources
end
|
Class Method Details
.deprecation_warning(message) ⇒ Object
32
33
34
35
36
37
38
39
|
# File 'lib/react/component.rb', line 32
def self.deprecation_warning(message)
@deprecation_messages ||= []
message = "Warning: Deprecated feature used in #{name}. #{message}"
unless @deprecation_messages.include? message
@deprecation_messages << message
IsomorphicHelpers.log message, :warning
end
end
|
.included(base) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/react/component.rb', line 15
def self.included(base)
base.include(API)
base.include(Callbacks)
base.include(Tags)
base.include(DslInstanceMethods)
base.class_eval do
class_attribute :initial_state
define_callback :before_mount
define_callback :after_mount
define_callback :before_receive_props
define_callback :before_update
define_callback :after_update
define_callback :before_unmount
end
base.extend(ClassMethods)
end
|
Instance Method Details
#_render_wrapper ⇒ Object
141
142
143
144
145
146
147
|
# File 'lib/react/component.rb', line 141
def _render_wrapper
State.set_state_context_to(self) do
React::RenderingContext.render(nil) {render || ""}.tap { |element| @waiting_on_resources = element.waiting_on_resources if element.respond_to? :waiting_on_resources }
end
rescue Exception => e
self.class.process_exception(e, self)
end
|
#component_did_update(prev_props, prev_state) ⇒ Object
#component_will_mount ⇒ Object
#component_will_receive_props(next_props) ⇒ Object
80
81
82
83
84
85
86
|
# File 'lib/react/component.rb', line 80
def component_will_receive_props(next_props)
State.set_state_context_to(self) { self.run_callback(:before_receive_props, Hash.new(next_props)) }
rescue Exception => e
self.class.process_exception(e, self)
end
|
#component_will_unmount ⇒ Object
130
131
132
133
134
135
136
137
|
# File 'lib/react/component.rb', line 130
def component_will_unmount
State.set_state_context_to(self) do
self.run_callback(:before_unmount)
State.remove
end
rescue Exception => e
self.class.process_exception(e, self)
end
|
#component_will_update(next_props, next_state) ⇒ Object
114
115
116
117
118
119
|
# File 'lib/react/component.rb', line 114
def component_will_update(next_props, next_state)
State.set_state_context_to(self) { self.run_callback(:before_update, Hash.new(next_props), Hash.new(next_state)) }
@props_wrapper = self.class.props_wrapper.new(Hash.new(next_props), @props_wrapper)
rescue Exception => e
self.class.process_exception(e, self)
end
|
#define_state(*args, &block) ⇒ Object
153
154
155
|
# File 'lib/react/component.rb', line 153
def define_state(*args, &block)
State.initialize_states(self, self.class.define_state(*args, &block))
end
|
#deprecated_params_method(name, *args, &block) ⇒ Object
4
5
6
7
|
# File 'lib/react/component/props_wrapper.rb', line 4
def deprecated_params_method(name, *args, &block)
React::Component.deprecation_warning"Direct access to param `#{name}`. Use `params.#{name}` instead."
params.send(name, *args, &block)
end
|
#emit(event_name, *args) ⇒ Object
57
58
59
|
# File 'lib/react/component.rb', line 57
def emit(event_name, *args)
self.params["_on#{event_name.to_s.event_camelize}"].call(*args)
end
|
#initialize(native_element) ⇒ Object
41
42
43
|
# File 'lib/react/component.rb', line 41
def initialize(native_element)
@native = native_element
end
|
#props_changed?(next_props) ⇒ Boolean
88
89
90
91
|
# File 'lib/react/component.rb', line 88
def props_changed?(next_props)
return true unless props.keys.sort == next_props.keys.sort
props.detect { |k, v| `#{next_props[k]} != #{params[k]}`}
end
|
45
46
47
|
# File 'lib/react/component.rb', line 45
def render
raise "no render defined"
end
|
#should_component_update?(next_props, next_state) ⇒ Boolean
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/react/component.rb', line 93
def should_component_update?(next_props, next_state)
State.set_state_context_to(self) do
next_props = Hash.new(next_props)
if self.respond_to?(:needs_update?)
!!self.needs_update?(next_props, Hash.new(next_state))
elsif false true
elsif props_changed? next_props
true
elsif `!next_state != !#{@native}.state`
true
elsif `!next_state && !#{@native}.state`
false
elsif `next_state["***_state_updated_at-***"] != #{@native}.state["***_state_updated_at-***"]`
true
else
false
end.to_n
end
end
|
#update_react_js_state(object, name, value) ⇒ Object
49
50
51
52
53
54
55
|
# File 'lib/react/component.rb', line 49
def update_react_js_state(object, name, value)
if object
set_state({"***_state_updated_at-***" => Time.now.to_f, "#{object.class.to_s+'.' unless object == self}#{name}" => value})
else
set_state({name => value})
end rescue nil
end
|
#watch(value, &on_change) ⇒ Object
149
150
151
|
# File 'lib/react/component.rb', line 149
def watch(value, &on_change)
Observable.new(value, on_change)
end
|