This repository was archived by the owner on Oct 19, 2018. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +27
-32
lines changed Expand file tree Collapse file tree 2 files changed +27
-32
lines changed Original file line number Diff line number Diff line change @@ -38,6 +38,15 @@ def mounted?
38
38
`#{ @native } .isMounted()`
39
39
end
40
40
41
+ def set_state ( state , &block )
42
+ raise "No native ReactComponent associated" unless @native
43
+ %x{
44
+ #{ @native } .setState(#{ state . to_n } , function(){
45
+ #{ block . call if block }
46
+ });
47
+ }
48
+ end
49
+
41
50
def component_will_mount
42
51
self . run_callback ( :before_mount )
43
52
end
@@ -131,43 +140,18 @@ def define_state(*states)
131
140
states . each do |name |
132
141
# getter
133
142
define_method ( "#{ name } " ) do
134
- unless @native
135
- self . class . init_state [ name ]
136
- else
137
- `#{ @native } .state[#{ name } ]`
138
- end
143
+ return unless @native
144
+ `#{ @native } .state[#{ name } ]`
139
145
end
140
146
# setter
141
147
define_method ( "#{ name } =" ) do |new_state |
142
- unless @native
143
- self . class . init_state [ name ] = new_state
144
- else
145
- %x{
146
- state = #{ @native } .state || {};
147
- state[#{ name } ] = #{ new_state } ;
148
- #{ @native } .setState(state);
149
- }
150
- end
151
-
152
- new_state
153
- end
154
- # setter with callback
155
- define_method ( "set_#{ name } " ) do |new_state , &block |
156
- unless @native
157
- self . class . init_state [ name ] = new_state
158
- else
159
- %x{
160
- state = #{ @native } .state || {};
161
- state[#{ name } ] = #{ new_state } ;
162
- #{ @native } .setState(state, function(){
163
- #{ block . call if block }
164
- });
165
- }
166
- end
148
+ return unless @native
149
+ hash = { }
150
+ hash [ name ] = new_state
151
+ self . set_state ( hash )
167
152
168
153
new_state
169
154
end
170
-
171
155
end
172
156
end
173
157
end
Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ def render
90
90
it "should allow block for life cycle callback" do
91
91
Foo . class_eval do
92
92
define_state ( :foo )
93
-
93
+
94
94
before_mount do
95
95
self . foo = "bar"
96
96
end
@@ -193,6 +193,17 @@ def render
193
193
expect ( element . getDOMNode . textContent ) . to eq ( "10" )
194
194
end
195
195
196
+ it "should support original `set_state` method" do
197
+ Foo . class_eval do
198
+ before_mount do
199
+ self . set_state ( foo : "bar" )
200
+ end
201
+ end
202
+
203
+ element = renderToDocument ( Foo )
204
+ expect ( element . state . foo ) . to be ( "bar" )
205
+ end
206
+
196
207
pending "should set initial state in Class#initialize method" do
197
208
Foo . class_eval do
198
209
define_state :foo , :bar
You can’t perform that action at this time.
0 commit comments