Skip to content
This repository was archived by the owner on Oct 19, 2018. It is now read-only.

Commit 1fbaf50

Browse files
committed
Fix state getter
1 parent 80c88d6 commit 1fbaf50

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

lib/react/component.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ def mounted?
3838
`#{@native}.isMounted()`
3939
end
4040

41+
def state
42+
raise "No native ReactComponent associated" unless @native
43+
Native(`#{@native}.state`)
44+
end
45+
4146
def set_state(state, &block)
4247
raise "No native ReactComponent associated" unless @native
4348
%x{
@@ -141,7 +146,7 @@ def define_state(*states)
141146
# getter
142147
define_method("#{name}") do
143148
return unless @native
144-
`#{@native}.state[#{name}]`
149+
self.state[name]
145150
end
146151
# setter
147152
define_method("#{name}=") do |new_state|

spec/component_spec.rb

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def render
193193
expect(element.getDOMNode.textContent).to eq("10")
194194
end
195195

196-
it "should support original `set_state` method" do
196+
it "should support original `setState` as `set_state` method" do
197197
Foo.class_eval do
198198
before_mount do
199199
self.set_state(foo: "bar")
@@ -203,6 +203,36 @@ def render
203203
element = renderToDocument(Foo)
204204
expect(element.state.foo).to be("bar")
205205
end
206+
207+
it "should support originl `state` method" do
208+
Foo.class_eval do
209+
before_mount do
210+
self.set_state(foo: "bar")
211+
end
212+
213+
def render
214+
div { self.state[:foo] }
215+
end
216+
end
217+
218+
expect(React.render_to_static_markup(React.create_element(Foo))).to eq("<div>bar</div>")
219+
end
220+
221+
it "should transform state getter to Ruby object" do
222+
Foo.class_eval do
223+
define_state :foo
224+
225+
before_mount do
226+
self.foo = {a: 10}
227+
end
228+
229+
def render
230+
div { self.foo[:a] }
231+
end
232+
end
233+
234+
expect(React.render_to_static_markup(React.create_element(Foo))).to eq("<div>10</div>")
235+
end
206236
end
207237

208238
describe "Props" do

0 commit comments

Comments
 (0)