Skip to content

Commit fc7e293

Browse files
ensure to initialize registered stores array before accessing
1 parent 3c3af1d commit fc7e293

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

lib/react_on_rails/helper.rb

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,11 @@ def redux_store(store_name, props: {}, defer: false)
199199
redux_store_data = { store_name: store_name,
200200
props: props }
201201
if defer
202-
@registered_stores_defer_render ||= []
203-
@registered_stores_defer_render << redux_store_data
202+
registered_stores_defer_render << redux_store_data
204203
"YOU SHOULD NOT SEE THIS ON YOUR VIEW -- Uses as a code block, like <% redux_store %> " \
205204
"and not <%= redux store %>"
206205
else
207-
@registered_stores ||= []
208-
@registered_stores << redux_store_data
206+
registered_stores << redux_store_data
209207
result = render_redux_store_data(redux_store_data)
210208
prepend_render_rails_context(result)
211209
end
@@ -217,9 +215,9 @@ def redux_store(store_name, props: {}, defer: false)
217215
# client side rendering of this hydration data, which is a hidden div with a matching class
218216
# that contains a data props.
219217
def redux_store_hydration_data
220-
return if @registered_stores_defer_render.blank?
218+
return if registered_stores_defer_render.blank?
221219

222-
@registered_stores_defer_render.reduce(+"") do |accum, redux_store_data|
220+
registered_stores_defer_render.reduce(+"") do |accum, redux_store_data|
223221
accum << render_redux_store_data(redux_store_data)
224222
end.html_safe
225223
end
@@ -403,12 +401,20 @@ def run_stream_inside_fiber
403401
end
404402

405403
def registered_stores
406-
(@registered_stores || []) + (@registered_stores_defer_render || [])
404+
@registered_stores ||= []
405+
end
406+
407+
def registered_stores_defer_render
408+
@registered_stores_defer_render ||= []
409+
end
410+
411+
def registered_stores_including_deferred
412+
registered_stores + registered_stores_defer_render
407413
end
408414

409415
def create_render_options(react_component_name, options)
410416
# If no store dependencies are passed, default to all registered stores up till now
411-
options[:store_dependencies] ||= registered_stores.map { |store| store[:store_name] }
417+
options[:store_dependencies] ||= registered_stores_including_deferred.map { |store| store[:store_name] }
412418
ReactOnRails::ReactComponent::RenderOptions.new(react_component_name: react_component_name,
413419
options: options)
414420
end
@@ -727,7 +733,7 @@ def initialize_redux_stores(render_options)
727733
return result unless store_dependencies.present?
728734

729735
declarations = +"var reduxProps, store, storeGenerator;\n"
730-
store_objects = registered_stores.select { |store| store_dependencies.include?(store[:store_name]) }
736+
store_objects = registered_stores_including_deferred.select { |store| store_dependencies.include?(store[:store_name]) }
731737

732738
result << store_objects.each_with_object(declarations) do |redux_store_data, memo|
733739
store_name = redux_store_data[:store_name]

0 commit comments

Comments
 (0)